diff --git a/lib/model/repositories/local_repository.dart b/lib/model/repositories/local_repository.dart index 0815005..a9ce4a0 100644 --- a/lib/model/repositories/local_repository.dart +++ b/lib/model/repositories/local_repository.dart @@ -2,12 +2,16 @@ import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; +import '../alarm.dart'; import '../task.dart'; +import 'interfaces/alarm_repository.dart'; import 'interfaces/task_repository.dart'; -class LocalRepository implements TaskRepository { +class LocalRepository implements TaskRepository, AlarmRepository { static const String _tasksKey = 'tasks'; static const String _taskOrderKey = 'taskOrder'; + static const String _alarmsKey = 'alarms'; + SharedPreferencesWithCache? _prefs; Future initialize() async { @@ -30,6 +34,11 @@ class LocalRepository implements TaskRepository { return _prefs!.setStringList(_taskOrderKey, jsonList); } + Future _saveAlarms(List alarms) async { + final jsonList = alarms.map((e) => jsonEncode(e.toJson())).toList(); + return _prefs!.setStringList(_alarmsKey, jsonList); + } + // Create @override @@ -46,6 +55,13 @@ class LocalRepository implements TaskRepository { return _saveTaskOrder(taskOrder); } + @override + Future createAlarm(Alarm alarm) async { + final alarms = await loadAlarms(); + alarms.add(alarm); + _saveAlarms(alarms); + } + // Read @override @@ -61,6 +77,12 @@ class LocalRepository implements TaskRepository { return jsonList.map((e) => jsonDecode(e)).toList(); } + @override + Future> loadAlarms() async { + final Iterable jsonList = _prefs!.getStringList(_alarmsKey) ?? []; + return jsonList.map((e) => Alarm.fromJson(jsonDecode(e))).toList(); + } + // Update @override @@ -76,6 +98,14 @@ class LocalRepository implements TaskRepository { return _saveTaskOrder(taskOrder); } + @override + Future updateAlarm(Alarm alarm) async { + final alarms = await loadAlarms(); + alarms.remove(alarm); + alarms.add(alarm); + _saveAlarms(alarms); + } + // Delete @override @@ -91,4 +121,11 @@ class LocalRepository implements TaskRepository { taskOrder.remove(taskOrderEntry); return _saveTaskOrder(taskOrder); } + + @override + Future deleteAlarm(Alarm alarm) async { + final alarms = await loadAlarms(); + alarms.remove(alarm); + _saveAlarms(alarms); + } }