Skip to content

Instantly share code, notes, and snippets.

@demirdev
Last active September 8, 2022 11:56
Show Gist options
  • Save demirdev/068d2f036e18c77b9fe9ac00ee81bf24 to your computer and use it in GitHub Desktop.
Save demirdev/068d2f036e18c77b9fe9ac00ee81bf24 to your computer and use it in GitHub Desktop.
Local Storage Service with Enum Keys
import 'dart:convert';
import 'package:get_storage/get_storage.dart';
import 'package:quran_app/screens/settings/bloc/settings_bloc.dart';
/// Read custom class from local storage
final SettingsState settings =
LocalStorageKey.settingsObject.readObject(SettingsState.empty());
/// Read email from local storage
final String? email = LocalStorageKey.email.read();
enum LocalStorageKey {
settingsObject,
email,
}
extension LocalStorageExtension on LocalStorageKey {
read() => LocalStorageService.instance.read(this);
remove() => LocalStorageService.instance.remove(this);
write(value) => LocalStorageService.instance.write(this, value);
T readObject<T extends Encodable>(T instance) => LocalStorageService.instance
.readObject<T>(this, defaultInstance: instance);
writeObject<T extends Codable>(T object) =>
LocalStorageService.instance.writeObject(this, object);
}
class LocalStorageService {
LocalStorageService._();
static final instance = LocalStorageService._();
late GetStorage _storage;
init() async {
await GetStorage.init();
_storage = GetStorage();
}
read(LocalStorageKey key) {
return _storage.read(key.name);
}
remove(LocalStorageKey key) {
return _storage.remove(key.name);
}
write(LocalStorageKey key, value) {
return _storage.write(key.name, value);
}
clearAll() {
_storage.erase();
}
T readObject<T extends Encodable>(LocalStorageKey key,
{required T defaultInstance}) {
final value = _storage.read(key.name);
if (value == null) {
return defaultInstance;
}
return defaultInstance.fromMap(jsonDecode(value));
}
writeObject(LocalStorageKey key, Codable object) {
return _storage.write(key.name, jsonEncode(object.toMap()));
}
}
abstract class Codable {
Object toMap();
}
abstract class Encodable<T> {
T fromMap(Map<String, dynamic> map);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment