75 lines
2.1 KiB
Dart
75 lines
2.1 KiB
Dart
import 'dart:async';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import '../../../core/network/dio_client.dart';
|
|
import '../domain/sales_channel.dart';
|
|
|
|
class SalesChannelsNotifier extends AsyncNotifier<List<SalesChannel>> {
|
|
@override
|
|
FutureOr<List<SalesChannel>> build() async {
|
|
return _fetchChannels();
|
|
}
|
|
|
|
Future<List<SalesChannel>> _fetchChannels() async {
|
|
try {
|
|
final response = await DioClient().dio.get('/sales-channels');
|
|
if (response.statusCode == 200) {
|
|
final List<dynamic> data = response.data;
|
|
return data.map((e) => SalesChannel.fromJson(e)).toList();
|
|
}
|
|
return [];
|
|
} catch (e) {
|
|
print('Error fetching sales channels: $e');
|
|
return [];
|
|
}
|
|
}
|
|
|
|
Future<void> refresh() async {
|
|
state = const AsyncValue.loading();
|
|
try {
|
|
final channels = await _fetchChannels();
|
|
state = AsyncValue.data(channels);
|
|
} catch (e, stack) {
|
|
state = AsyncValue.error(e, stack);
|
|
}
|
|
}
|
|
|
|
Future<SalesChannel?> createChannel(SalesChannel channel) async {
|
|
try {
|
|
final response = await DioClient().dio.post('/sales-channels', data: channel.toJson());
|
|
await refresh();
|
|
if (response.data != null) {
|
|
return SalesChannel.fromJson(response.data);
|
|
}
|
|
return null;
|
|
} catch (e) {
|
|
throw Exception('Failed to create sales channel: $e');
|
|
}
|
|
}
|
|
|
|
Future<SalesChannel?> updateChannel(int id, SalesChannel channel) async {
|
|
try {
|
|
final response = await DioClient().dio.put('/sales-channels/$id', data: channel.toJson());
|
|
await refresh();
|
|
if (response.data != null) {
|
|
return SalesChannel.fromJson(response.data);
|
|
}
|
|
return null;
|
|
} catch (e) {
|
|
throw Exception('Failed to update sales channel: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> deleteChannel(int id) async {
|
|
try {
|
|
await DioClient().dio.delete('/sales-channels/$id');
|
|
await refresh();
|
|
} catch (e) {
|
|
throw Exception('Failed to delete sales channel: $e');
|
|
}
|
|
}
|
|
}
|
|
|
|
final salesChannelsProvider = AsyncNotifierProvider<SalesChannelsNotifier, List<SalesChannel>>(() {
|
|
return SalesChannelsNotifier();
|
|
});
|