Files
Kifi/kifi-app/lib/features/sales/providers/sales_channels_provider.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();
});