Compare commits
2 Commits
336be6cb72
...
cad43c7664
| Author | SHA1 | Date | |
|---|---|---|---|
| cad43c7664 | |||
| 5c44574949 |
@@ -7,6 +7,7 @@ import 'pages/collections_list_page.dart';
|
|||||||
import 'pages/search_page.dart';
|
import 'pages/search_page.dart';
|
||||||
import 'pages/settings_page.dart';
|
import 'pages/settings_page.dart';
|
||||||
import 'service/search_provider.dart';
|
import 'service/search_provider.dart';
|
||||||
|
import 'service/settings_provider.dart';
|
||||||
import 'service/shared_link_provider.dart';
|
import 'service/shared_link_provider.dart';
|
||||||
import 'service/storage.dart';
|
import 'service/storage.dart';
|
||||||
import 'service/share_intent_service.dart';
|
import 'service/share_intent_service.dart';
|
||||||
@@ -20,6 +21,7 @@ void main() async {
|
|||||||
providers: [
|
providers: [
|
||||||
ChangeNotifierProvider(create: (_) => SharedLinkProvider()),
|
ChangeNotifierProvider(create: (_) => SharedLinkProvider()),
|
||||||
ChangeNotifierProvider(create: (_) => SearchProvider()),
|
ChangeNotifierProvider(create: (_) => SearchProvider()),
|
||||||
|
ChangeNotifierProvider(create: (_) => SettingsProvider()),
|
||||||
],
|
],
|
||||||
child: const MapsBookmarks(),
|
child: const MapsBookmarks(),
|
||||||
),
|
),
|
||||||
|
|||||||
29
lib/model/settings.dart
Normal file
29
lib/model/settings.dart
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import '../assets/constants.dart' as constants;
|
||||||
|
|
||||||
|
class Settings {
|
||||||
|
final String exportDirectoryPath;
|
||||||
|
|
||||||
|
Settings._({required this.exportDirectoryPath});
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return {'exportDirectoryPath': exportDirectoryPath};
|
||||||
|
}
|
||||||
|
|
||||||
|
factory Settings.fromJson(Map<String, dynamic> json) {
|
||||||
|
return Settings._(
|
||||||
|
exportDirectoryPath: json['exportDirectoryPath'] as String,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
factory Settings.defaults() {
|
||||||
|
return Settings._(
|
||||||
|
exportDirectoryPath: constants.defaultAndroidExportDirectory,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings copyWith({String? exportDirectoryPath}) {
|
||||||
|
return Settings._(
|
||||||
|
exportDirectoryPath: exportDirectoryPath ?? this.exportDirectoryPath,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
20
lib/service/settings_provider.dart
Normal file
20
lib/service/settings_provider.dart
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import '../model/settings.dart';
|
||||||
|
import 'storage.dart';
|
||||||
|
|
||||||
|
class SettingsProvider extends ChangeNotifier {
|
||||||
|
SettingsProvider() : _settings = Storage.loadSettings();
|
||||||
|
|
||||||
|
Settings _settings;
|
||||||
|
|
||||||
|
Settings get settings => _settings;
|
||||||
|
|
||||||
|
void setExportDirectoryPath(String path, {bool silent = false}) {
|
||||||
|
_settings = _settings.copyWith(exportDirectoryPath: path);
|
||||||
|
_saveSettings();
|
||||||
|
if (!silent) notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _saveSettings() => Storage.saveSettings(_settings);
|
||||||
|
}
|
||||||
@@ -4,22 +4,46 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||||||
|
|
||||||
import '../model/bookmark.dart';
|
import '../model/bookmark.dart';
|
||||||
import '../model/collection.dart';
|
import '../model/collection.dart';
|
||||||
|
import '../model/settings.dart';
|
||||||
import 'json_file_service.dart';
|
import 'json_file_service.dart';
|
||||||
|
|
||||||
class Storage {
|
class Storage {
|
||||||
static const String _bookmarksKey = 'bookmarks';
|
static const String _bookmarksKey = 'bookmarks';
|
||||||
static const String _collectionsKey = 'collections';
|
static const String _collectionsKey = 'collections';
|
||||||
static SharedPreferencesWithCache? _prefsWithCache;
|
static SharedPreferencesWithCache? _prefsWithCache;
|
||||||
|
static const String _settingsKey = 'settings';
|
||||||
static const String _statsKey = 'stats';
|
static const String _statsKey = 'stats';
|
||||||
|
|
||||||
static Future<void> initialize() async {
|
static Future<void> initialize() async {
|
||||||
_prefsWithCache = await SharedPreferencesWithCache.create(
|
_prefsWithCache = await SharedPreferencesWithCache.create(
|
||||||
cacheOptions: const SharedPreferencesWithCacheOptions(
|
cacheOptions: const SharedPreferencesWithCacheOptions(
|
||||||
allowList: <String>{_collectionsKey, _bookmarksKey, _statsKey},
|
allowList: <String>{
|
||||||
|
_collectionsKey,
|
||||||
|
_bookmarksKey,
|
||||||
|
_statsKey,
|
||||||
|
_settingsKey,
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Settings loadSettings() {
|
||||||
|
final jsonString = _prefs.getString(_settingsKey);
|
||||||
|
if (jsonString != null) {
|
||||||
|
final json = jsonDecode(jsonString) as Map<String, dynamic>;
|
||||||
|
return Settings.fromJson(json);
|
||||||
|
} else {
|
||||||
|
final settings = Settings.defaults();
|
||||||
|
saveSettings(settings);
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<void> saveSettings(Settings settings) {
|
||||||
|
final json = jsonEncode(settings.toJson());
|
||||||
|
return _prefs.setString(_settingsKey, json);
|
||||||
|
}
|
||||||
|
|
||||||
static List<Collection> loadCollections() {
|
static List<Collection> loadCollections() {
|
||||||
final jsonString = _prefs.getString(_collectionsKey) ?? '[]';
|
final jsonString = _prefs.getString(_collectionsKey) ?? '[]';
|
||||||
final jsonList = jsonDecode(jsonString) as List;
|
final jsonList = jsonDecode(jsonString) as List;
|
||||||
@@ -156,15 +180,6 @@ class Storage {
|
|||||||
await _prefs.setString(_statsKey, jsonEncode(stats));
|
await _prefs.setString(_statsKey, jsonEncode(stats));
|
||||||
}
|
}
|
||||||
|
|
||||||
static SharedPreferencesWithCache get _prefs {
|
|
||||||
if (_prefsWithCache == null) {
|
|
||||||
throw StateError(
|
|
||||||
'BookmarkStorage not initialized. Call initialize() first.',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return _prefsWithCache!;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<bool> exportToJsonFile() => JsonFileService.exportToJson(
|
static Future<bool> exportToJsonFile() => JsonFileService.exportToJson(
|
||||||
collections: loadCollections(),
|
collections: loadCollections(),
|
||||||
bookmarks: loadBookmarks(),
|
bookmarks: loadBookmarks(),
|
||||||
@@ -180,4 +195,13 @@ class Storage {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SharedPreferencesWithCache get _prefs {
|
||||||
|
if (_prefsWithCache == null) {
|
||||||
|
throw StateError(
|
||||||
|
'BookmarkStorage not initialized. Call initialize() first.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return _prefsWithCache!;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user