added location handling to storage
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
import '../../location.dart';
|
||||||
|
|
||||||
|
abstract class LocationRepository {
|
||||||
|
// Create
|
||||||
|
|
||||||
|
Future<void> createLocation(Location location);
|
||||||
|
|
||||||
|
// Read
|
||||||
|
|
||||||
|
Future<List<Location>> loadLocations();
|
||||||
|
|
||||||
|
// Update
|
||||||
|
|
||||||
|
Future<void> updateLocation(Location location);
|
||||||
|
|
||||||
|
// Delete
|
||||||
|
|
||||||
|
Future<void> deleteLocation(Location location);
|
||||||
|
}
|
||||||
@@ -3,14 +3,18 @@ import 'dart:convert';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
import '../alarm.dart';
|
import '../alarm.dart';
|
||||||
|
import '../location.dart';
|
||||||
import '../task.dart';
|
import '../task.dart';
|
||||||
import 'interfaces/alarm_repository.dart';
|
import 'interfaces/alarm_repository.dart';
|
||||||
|
import 'interfaces/location_repository.dart';
|
||||||
import 'interfaces/task_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 _tasksKey = 'tasks';
|
||||||
static const String _taskOrderKey = 'taskOrder';
|
static const String _taskOrderKey = 'taskOrder';
|
||||||
static const String _alarmsKey = 'alarms';
|
static const String _alarmsKey = 'alarms';
|
||||||
|
static const String _locationsKey = 'locations';
|
||||||
|
|
||||||
SharedPreferencesWithCache? _prefs;
|
SharedPreferencesWithCache? _prefs;
|
||||||
|
|
||||||
@@ -29,6 +33,13 @@ class LocalRepository implements TaskRepository, AlarmRepository {
|
|||||||
_prefs!.setStringList(_tasksKey, jsonList);
|
_prefs!.setStringList(_tasksKey, jsonList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _saveLocations(List<Location> locations) async {
|
||||||
|
final jsonList = locations
|
||||||
|
.map<String>((e) => jsonEncode(e.toJson()))
|
||||||
|
.toList();
|
||||||
|
_prefs!.setStringList(_locationsKey, jsonList);
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _saveTaskOrder(List<String> taskOrder) async {
|
Future<void> _saveTaskOrder(List<String> taskOrder) async {
|
||||||
final jsonList = taskOrder.map((e) => jsonEncode(e)).toList();
|
final jsonList = taskOrder.map((e) => jsonEncode(e)).toList();
|
||||||
return _prefs!.setStringList(_taskOrderKey, jsonList);
|
return _prefs!.setStringList(_taskOrderKey, jsonList);
|
||||||
@@ -62,6 +73,13 @@ class LocalRepository implements TaskRepository, AlarmRepository {
|
|||||||
_saveAlarms(alarms);
|
_saveAlarms(alarms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> createLocation(Location location) async {
|
||||||
|
final locations = await loadLocations();
|
||||||
|
locations.add(location);
|
||||||
|
_saveLocations(locations);
|
||||||
|
}
|
||||||
|
|
||||||
// Read
|
// Read
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -83,6 +101,15 @@ class LocalRepository implements TaskRepository, AlarmRepository {
|
|||||||
return jsonList.map<Alarm>((e) => Alarm.fromJson(jsonDecode(e))).toList();
|
return jsonList.map<Alarm>((e) => Alarm.fromJson(jsonDecode(e))).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<Location>> loadLocations() async {
|
||||||
|
final Iterable<String> jsonList =
|
||||||
|
_prefs!.getStringList(_locationsKey) ?? [];
|
||||||
|
return jsonList
|
||||||
|
.map<Location>((e) => Location.fromJson(jsonDecode(e)))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -106,6 +133,14 @@ class LocalRepository implements TaskRepository, AlarmRepository {
|
|||||||
_saveAlarms(alarms);
|
_saveAlarms(alarms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> updateLocation(Location location) async {
|
||||||
|
final locations = await loadLocations();
|
||||||
|
locations.remove(location);
|
||||||
|
locations.add(location);
|
||||||
|
_saveLocations(locations);
|
||||||
|
}
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -128,4 +163,11 @@ class LocalRepository implements TaskRepository, AlarmRepository {
|
|||||||
alarms.remove(alarm);
|
alarms.remove(alarm);
|
||||||
_saveAlarms(alarms);
|
_saveAlarms(alarms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteLocation(Location location) async {
|
||||||
|
final locations = await loadLocations();
|
||||||
|
locations.remove(location);
|
||||||
|
_saveLocations(locations);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user