80 lines
2.2 KiB
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();
|
|
});
|