import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/network/dio_client.dart'; import '../domain/barcode_template.dart'; class BarcodeTemplatesNotifier extends AsyncNotifier> { @override FutureOr> build() async { return _fetchTemplates(); } Future> _fetchTemplates() async { try { final response = await DioClient().dio.get('/barcode-templates'); if (response.statusCode == 200) { final List data = response.data; return data.map((e) => BarcodeTemplate.fromJson(e)).toList(); } return []; } catch (e) { print('Error fetching barcode templates: $e'); return []; } } Future refresh() async { state = const AsyncValue.loading(); try { final templates = await _fetchTemplates(); state = AsyncValue.data(templates); } catch (e, stack) { state = AsyncValue.error(e, stack); } } Future saveTemplate(BarcodeTemplate template) async { try { if (template.id != null) { final response = await DioClient().dio.put( '/barcode-templates/${template.id}', data: template.toJson(), ); await refresh(); if (response.data != null) { return BarcodeTemplate.fromJson(response.data); } } else { final response = await DioClient().dio.post( '/barcode-templates', data: template.toJson(), ); await refresh(); if (response.data != null) { return BarcodeTemplate.fromJson(response.data); } } return null; } catch (e) { print('Error saving barcode template: $e'); rethrow; } } Future deleteTemplate(int id) async { try { final response = await DioClient().dio.delete('/barcode-templates/$id'); await refresh(); return response.statusCode == 200 || response.statusCode == 204; } catch (e) { print('Error deleting barcode template: $e'); return false; } } } final barcodeTemplatesProvider = AsyncNotifierProvider>(() { return BarcodeTemplatesNotifier(); });