Compare commits
3 Commits
c5fafc2053
...
91eccc50ef
| Author | SHA1 | Date | |
|---|---|---|---|
| 91eccc50ef | |||
| d4d191d5d2 | |||
| f9642b0230 |
@@ -1,3 +1,29 @@
|
|||||||
|
import 'location_alarm.dart';
|
||||||
|
import 'time_alarm.dart';
|
||||||
|
|
||||||
abstract class Alarm {
|
abstract class Alarm {
|
||||||
String get id;
|
String get id;
|
||||||
|
Map<String, dynamic> toJson();
|
||||||
|
|
||||||
|
factory Alarm.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json.containsKey('triggerAt')) {
|
||||||
|
return TimeAlarm.fromJson(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (json.containsKey('location')) {
|
||||||
|
return LocationAlarm.fromJson(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw ArgumentError('Unknown alarm type');
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (other is! Alarm) return false;
|
||||||
|
|
||||||
|
return hashCode == other.hashCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => id.hashCode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class LocationAlarm implements Alarm {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
return {
|
return {
|
||||||
'id': id,
|
'id': id,
|
||||||
|
|||||||
@@ -2,12 +2,16 @@ import 'dart:convert';
|
|||||||
|
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
import '../alarm.dart';
|
||||||
import '../task.dart';
|
import '../task.dart';
|
||||||
|
import 'interfaces/alarm_repository.dart';
|
||||||
import 'interfaces/task_repository.dart';
|
import 'interfaces/task_repository.dart';
|
||||||
|
|
||||||
class LocalRepository implements TaskRepository {
|
class LocalRepository implements TaskRepository, AlarmRepository {
|
||||||
static const String _tasksKey = 'tasks';
|
static const String _tasksKey = 'tasks';
|
||||||
static const String _taskOrderKey = 'taskOrder';
|
static const String _taskOrderKey = 'taskOrder';
|
||||||
|
static const String _alarmsKey = 'alarms';
|
||||||
|
|
||||||
SharedPreferencesWithCache? _prefs;
|
SharedPreferencesWithCache? _prefs;
|
||||||
|
|
||||||
Future<void> initialize() async {
|
Future<void> initialize() async {
|
||||||
@@ -30,6 +34,11 @@ class LocalRepository implements TaskRepository {
|
|||||||
return _prefs!.setStringList(_taskOrderKey, jsonList);
|
return _prefs!.setStringList(_taskOrderKey, jsonList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _saveAlarms(List<Alarm> alarms) async {
|
||||||
|
final jsonList = alarms.map<String>((e) => jsonEncode(e.toJson())).toList();
|
||||||
|
return _prefs!.setStringList(_alarmsKey, jsonList);
|
||||||
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -46,6 +55,13 @@ class LocalRepository implements TaskRepository {
|
|||||||
return _saveTaskOrder(taskOrder);
|
return _saveTaskOrder(taskOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> createAlarm(Alarm alarm) async {
|
||||||
|
final alarms = await loadAlarms();
|
||||||
|
alarms.add(alarm);
|
||||||
|
_saveAlarms(alarms);
|
||||||
|
}
|
||||||
|
|
||||||
// Read
|
// Read
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -61,6 +77,12 @@ class LocalRepository implements TaskRepository {
|
|||||||
return jsonList.map<String>((e) => jsonDecode(e)).toList();
|
return jsonList.map<String>((e) => jsonDecode(e)).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<Alarm>> loadAlarms() async {
|
||||||
|
final Iterable<String> jsonList = _prefs!.getStringList(_alarmsKey) ?? [];
|
||||||
|
return jsonList.map<Alarm>((e) => Alarm.fromJson(jsonDecode(e))).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -76,6 +98,14 @@ class LocalRepository implements TaskRepository {
|
|||||||
return _saveTaskOrder(taskOrder);
|
return _saveTaskOrder(taskOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> updateAlarm(Alarm alarm) async {
|
||||||
|
final alarms = await loadAlarms();
|
||||||
|
alarms.remove(alarm);
|
||||||
|
alarms.add(alarm);
|
||||||
|
_saveAlarms(alarms);
|
||||||
|
}
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -91,4 +121,11 @@ class LocalRepository implements TaskRepository {
|
|||||||
taskOrder.remove(taskOrderEntry);
|
taskOrder.remove(taskOrderEntry);
|
||||||
return _saveTaskOrder(taskOrder);
|
return _saveTaskOrder(taskOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteAlarm(Alarm alarm) async {
|
||||||
|
final alarms = await loadAlarms();
|
||||||
|
alarms.remove(alarm);
|
||||||
|
_saveAlarms(alarms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ class TimeAlarm implements Alarm {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
return {'id': id, 'triggerAt': triggerAt.toIso8601String()};
|
return {'id': id, 'triggerAt': triggerAt.toIso8601String()};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import '../model/extensions/controller_context.dart';
|
|||||||
import '../model/task.dart';
|
import '../model/task.dart';
|
||||||
import '../service/task_controller.dart';
|
import '../service/task_controller.dart';
|
||||||
import '../service/tools.dart';
|
import '../service/tools.dart';
|
||||||
import '../service/validators.dart';
|
|
||||||
import '../widgets/time_selector.dart';
|
import '../widgets/time_selector.dart';
|
||||||
|
|
||||||
class TaskEditPage extends StatefulWidget {
|
class TaskEditPage extends StatefulWidget {
|
||||||
|
|||||||
Reference in New Issue
Block a user