import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../app/error_message.dart'; import '../../../app/load_state.dart'; import '../../../models/schedule_task.dart'; import '../../shared/providers/core_providers.dart'; final tasksProvider = NotifierProvider>>( () => TasksNotifier(), ); class TasksNotifier extends Notifier>> { @override LoadState> build() => const LoadState.idle([]); Future load() async { state = LoadState.loading(state.data); try { final api = ref.read(apiProvider); final res = await api.getTasks(); final tasks = ScheduleTask.listFromApi(res.data); state = tasks.isEmpty ? LoadState.empty(tasks) : LoadState.data(tasks); } catch (e) { state = LoadState.error(state.data, describeLoadError(e)); } } Future cancel(String jobId) async { await ref.read(apiProvider).cancelTask(jobId); await load(); } Future addOnce({ required String targetId, required bool targetState, int? hoursFromNow, String? runAt, bool isGroup = true, }) async { final params = { 'target_id': targetId, 'state': targetState, 'is_group': isGroup, }; if (hoursFromNow != null) params['hours_from_now'] = hoursFromNow; if (runAt != null) params['run_at'] = runAt; await ref.read(apiProvider).scheduleOnce(params); await load(); } Future addCron({ required String targetId, required String hour, required String minute, String dayOfWeek = '*', bool isGroup = true, bool targetState = true, }) async { await ref.read(apiProvider).scheduleCron({ 'target_id': targetId, 'hour': hour, 'minute': minute, 'day_of_week': dayOfWeek, 'is_group': isGroup, 'state': targetState, }); await load(); } }