refactor: split providers into feature modules

This commit is contained in:
Artem Kokos
2026-04-27 23:21:47 +07:00
parent eed04e9122
commit 872ddf9513
12 changed files with 925 additions and 924 deletions

View File

@@ -0,0 +1,72 @@
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, LoadState<List<ScheduleTask>>>(
() => TasksNotifier(),
);
class TasksNotifier extends Notifier<LoadState<List<ScheduleTask>>> {
@override
LoadState<List<ScheduleTask>> build() =>
const LoadState.idle(<ScheduleTask>[]);
Future<void> 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<void> cancel(String jobId) async {
await ref.read(apiProvider).cancelTask(jobId);
await load();
}
Future<void> addOnce({
required String targetId,
required bool targetState,
int? hoursFromNow,
String? runAt,
bool isGroup = true,
}) async {
final params = <String, dynamic>{
'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<void> 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();
}
}