import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/api/api_client.dart'; import '../../shared/models/task.dart'; class TasksNotifier extends StateNotifier> { TasksNotifier() : super(const AsyncLoading()); Future load({String? status, String? search, int page = 1}) async { state = const AsyncLoading(); try { final params = {'page': page, 'limit': 20, 'parent_id': 0}; if (status != null && status != 'all') params['status'] = status; if (search != null && search.isNotEmpty) params['search'] = search; final resp = await apiDio.get('/tasks/admin', queryParameters: params); state = AsyncData(PagedTasks.fromJson(resp.data)); } catch (e) { state = AsyncError(e, StackTrace.current); } } } final tasksProvider = StateNotifierProvider>( (_) => TasksNotifier()..load(), ); final taskDetailProvider = FutureProvider.autoDispose.family((ref, id) async { final resp = await apiDio.get('/tasks/$id'); return Task.fromJson(resp.data); }); Future createTask(Map data) async { final resp = await apiDio.post('/tasks', data: data); return Task.fromJson(resp.data); } Future updateTask(int id, Map data) async { final resp = await apiDio.patch('/tasks/$id', data: data); return Task.fromJson(resp.data); } Future deleteTask(int id) async { await apiDio.delete('/tasks/$id'); } Future addComment(int taskId, String body) async { await apiDio.post('/tasks/$taskId/comments', data: {'body': body}); }