Files
Kifi/kifi-app/lib/features/barcode_designer/providers/barcode_templates_provider.dart

80 lines
2.2 KiB
Dart

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<List<BarcodeTemplate>> {
@override
FutureOr<List<BarcodeTemplate>> build() async {
return _fetchTemplates();
}
Future<List<BarcodeTemplate>> _fetchTemplates() async {
try {
final response = await DioClient().dio.get('/barcode-templates');
if (response.statusCode == 200) {
final List<dynamic> data = response.data;
return data.map((e) => BarcodeTemplate.fromJson(e)).toList();
}
return [];
} catch (e) {
print('Error fetching barcode templates: $e');
return [];
}
}
Future<void> refresh() async {
state = const AsyncValue.loading();
try {
final templates = await _fetchTemplates();
state = AsyncValue.data(templates);
} catch (e, stack) {
state = AsyncValue.error(e, stack);
}
}
Future<BarcodeTemplate?> 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<bool> 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<BarcodeTemplatesNotifier, List<BarcodeTemplate>>(() {
return BarcodeTemplatesNotifier();
});