import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/api/api_client.dart'; import '../../shared/models/surat.dart'; // StateNotifier-based list provider (fixes Map equality bug) class SuratListNotifier extends StateNotifier> { SuratListNotifier() : super(const AsyncLoading()) { load(); } Future load({String? filter, String? search, int page = 1}) async { state = const AsyncLoading(); try { final params = {'page': page, 'limit': 20}; if (filter == 'approved') params['is_approved'] = true; if (filter == 'pending') params['is_approved'] = false; if (search != null && search.isNotEmpty) params['search'] = search; final resp = await apiDio.get('/surat', queryParameters: params); state = AsyncData(PagedSurat.fromJson(resp.data)); } catch (e) { state = AsyncError(e, StackTrace.current); } } } final suratListProvider = StateNotifierProvider>( (_) => SuratListNotifier(), ); final suratDetailProvider = FutureProvider.autoDispose.family((ref, id) async { final resp = await apiDio.get('/surat/$id'); return Surat.fromJson(resp.data); }); Future createSurat(Map data) async { final resp = await apiDio.post('/surat', data: data); return Surat.fromJson(resp.data); } Future updateSurat(int id, Map data) async { final resp = await apiDio.put('/surat/$id', data: data); return Surat.fromJson(resp.data); } Future approveSurat(int id) async { final resp = await apiDio.post('/surat/$id/approve'); return Surat.fromJson(resp.data); } Future unapproveSurat(int id) async { final resp = await apiDio.delete('/surat/$id/approve'); return Surat.fromJson(resp.data); } Future deleteSurat(int id) async { await apiDio.delete('/surat/$id'); }