From 023610804d06eca4a43244919fc44360bfecac3b Mon Sep 17 00:00:00 2001 From: marco Date: Thu, 18 Jun 2026 23:16:20 +0200 Subject: [PATCH] added location handling to storage --- .../interfaces/location_repository.dart | 19 ++++++++ lib/model/repositories/local_repository.dart | 44 ++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 lib/model/repositories/interfaces/location_repository.dart diff --git a/lib/model/repositories/interfaces/location_repository.dart b/lib/model/repositories/interfaces/location_repository.dart new file mode 100644 index 0000000..04db6b1 --- /dev/null +++ b/lib/model/repositories/interfaces/location_repository.dart @@ -0,0 +1,19 @@ +import '../../location.dart'; + +abstract class LocationRepository { + // Create + + Future createLocation(Location location); + + // Read + + Future> loadLocations(); + + // Update + + Future updateLocation(Location location); + + // Delete + + Future deleteLocation(Location location); +} diff --git a/lib/model/repositories/local_repository.dart b/lib/model/repositories/local_repository.dart index a9ce4a0..0d4df44 100644 --- a/lib/model/repositories/local_repository.dart +++ b/lib/model/repositories/local_repository.dart @@ -3,14 +3,18 @@ import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; import '../alarm.dart'; +import '../location.dart'; import '../task.dart'; import 'interfaces/alarm_repository.dart'; +import 'interfaces/location_repository.dart'; import 'interfaces/task_repository.dart'; -class LocalRepository implements TaskRepository, AlarmRepository { +class LocalRepository + implements TaskRepository, AlarmRepository, LocationRepository { static const String _tasksKey = 'tasks'; static const String _taskOrderKey = 'taskOrder'; static const String _alarmsKey = 'alarms'; + static const String _locationsKey = 'locations'; SharedPreferencesWithCache? _prefs; @@ -29,6 +33,13 @@ class LocalRepository implements TaskRepository, AlarmRepository { _prefs!.setStringList(_tasksKey, jsonList); } + Future _saveLocations(List locations) async { + final jsonList = locations + .map((e) => jsonEncode(e.toJson())) + .toList(); + _prefs!.setStringList(_locationsKey, jsonList); + } + Future _saveTaskOrder(List taskOrder) async { final jsonList = taskOrder.map((e) => jsonEncode(e)).toList(); return _prefs!.setStringList(_taskOrderKey, jsonList); @@ -62,6 +73,13 @@ class LocalRepository implements TaskRepository, AlarmRepository { _saveAlarms(alarms); } + @override + Future createLocation(Location location) async { + final locations = await loadLocations(); + locations.add(location); + _saveLocations(locations); + } + // Read @override @@ -83,6 +101,15 @@ class LocalRepository implements TaskRepository, AlarmRepository { return jsonList.map((e) => Alarm.fromJson(jsonDecode(e))).toList(); } + @override + Future> loadLocations() async { + final Iterable jsonList = + _prefs!.getStringList(_locationsKey) ?? []; + return jsonList + .map((e) => Location.fromJson(jsonDecode(e))) + .toList(); + } + // Update @override @@ -106,6 +133,14 @@ class LocalRepository implements TaskRepository, AlarmRepository { _saveAlarms(alarms); } + @override + Future updateLocation(Location location) async { + final locations = await loadLocations(); + locations.remove(location); + locations.add(location); + _saveLocations(locations); + } + // Delete @override @@ -128,4 +163,11 @@ class LocalRepository implements TaskRepository, AlarmRepository { alarms.remove(alarm); _saveAlarms(alarms); } + + @override + Future deleteLocation(Location location) async { + final locations = await loadLocations(); + locations.remove(location); + _saveLocations(locations); + } }