|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
|
|
import 'package:meta/meta.dart'; |
|
|
|
import 'package:shared_preferences/shared_preferences.dart'; |
|
|
|
import 'package:shared_preferences/shared_preferences.dart'; |
|
|
|
|
|
|
|
|
|
|
|
abstract interface class SettingsStorage { |
|
|
|
abstract interface class SettingsStorage { |
|
|
@ -14,35 +15,55 @@ abstract interface class SettingsStorage { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class AppStorage implements SettingsStorage { |
|
|
|
class AppStorage implements SettingsStorage { |
|
|
|
AppStorage( |
|
|
|
AppStorage(this._id); |
|
|
|
this._id, |
|
|
|
|
|
|
|
this._sharedPreferences, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final String _id; |
|
|
|
final String _id; |
|
|
|
final SharedPreferences _sharedPreferences; |
|
|
|
|
|
|
|
|
|
|
|
/// Shared preferences instance. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// Use [reqireDatabase] to access it. |
|
|
|
|
|
|
|
/// Make sure it has been initialized wiht [init] before. |
|
|
|
|
|
|
|
static SharedPreferences? _sharedPreferences; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Sets up the [SharedPreferences] instance. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// Required to be called before accessing [reqireDatabase]. |
|
|
|
|
|
|
|
static Future init() async { |
|
|
|
|
|
|
|
_sharedPreferences = await SharedPreferences.getInstance(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@visibleForTesting |
|
|
|
|
|
|
|
static SharedPreferences get reqireDatabase { |
|
|
|
|
|
|
|
if (_sharedPreferences == null) { |
|
|
|
|
|
|
|
throw StateError( |
|
|
|
|
|
|
|
'AppStorage has not been initialized yet. Please make sure AppStorage.init() has been called before and completed.', |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return _sharedPreferences!; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String _formatKey(final String key) => '$_id-$key'; |
|
|
|
String _formatKey(final String key) => '$_id-$key'; |
|
|
|
|
|
|
|
|
|
|
|
bool containsKey(final String key) => _sharedPreferences.containsKey(_formatKey(key)); |
|
|
|
bool containsKey(final String key) => reqireDatabase.containsKey(_formatKey(key)); |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
Future<bool> remove(final String key) => _sharedPreferences.remove(_formatKey(key)); |
|
|
|
Future<bool> remove(final String key) => reqireDatabase.remove(_formatKey(key)); |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
String? getString(final String key) => _sharedPreferences.getString(_formatKey(key)); |
|
|
|
String? getString(final String key) => reqireDatabase.getString(_formatKey(key)); |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
Future setString(final String key, final String value) => _sharedPreferences.setString(_formatKey(key), value); |
|
|
|
Future setString(final String key, final String value) => reqireDatabase.setString(_formatKey(key), value); |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
bool? getBool(final String key) => _sharedPreferences.getBool(_formatKey(key)); |
|
|
|
bool? getBool(final String key) => reqireDatabase.getBool(_formatKey(key)); |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
Future setBool(final String key, final bool value) => _sharedPreferences.setBool(_formatKey(key), value); |
|
|
|
Future setBool(final String key, final bool value) => reqireDatabase.setBool(_formatKey(key), value); |
|
|
|
|
|
|
|
|
|
|
|
List<String>? getStringList(final String key) => _sharedPreferences.getStringList(_formatKey(key)); |
|
|
|
List<String>? getStringList(final String key) => reqireDatabase.getStringList(_formatKey(key)); |
|
|
|
|
|
|
|
|
|
|
|
Future setStringList(final String key, final List<String> value) => |
|
|
|
Future setStringList(final String key, final List<String> value) => |
|
|
|
_sharedPreferences.setStringList(_formatKey(key), value); |
|
|
|
reqireDatabase.setStringList(_formatKey(key), value); |
|
|
|
} |
|
|
|
} |
|
|
|