Skip to content

Instantly share code, notes, and snippets.

@VB10
Created May 23, 2021 17:29
Show Gist options
  • Save VB10/d6e86c47f1795b32ed1e3610502818bc to your computer and use it in GitHub Desktop.
Save VB10/d6e86c47f1795b32ed1e3610502818bc to your computer and use it in GitHub Desktop.
class LocaleSharedManager {
static final LocaleSharedManager _instance = LocaleSharedManager._init();
static LocaleSharedManager get instance => _instance;
late final SharedPreferences _preferences;
LocaleSharedManager._init() {
SharedPreferences.getInstance().then((value) {
_preferences = value;
});
}
/// Force Initiliaze with [Future] at [SharedPreferences]
/// !MUST be use in main dart with main function
/// Example:
/// [await LocaleSharedManager.instance.prefencesInit()]
Future<void> prefencesInit() async {
_preferences = await SharedPreferences.getInstance();
}
Future<void> setStringValue(PreferenceKeys key, String value) async {
await _preferences.setString(key.rawValue, value);
}
String? getStringValue(PreferenceKeys key) => _preferences.getString(key.rawValue);
}
enum PreferenceKeys { THEME, FIRST_LOGIN_APP, NAME }
extension on PreferenceKeys {
String get rawValue {
switch (this) {
case PreferenceKeys.FIRST_LOGIN_APP:
return 'firstApp/$index';
case PreferenceKeys.THEME:
return 'theme/$index';
default:
return '$this/$index';
}
}
}
class SampleView extends StatefulWidget {
@override
_SampleViewState createState() => _SampleViewState();
}
class _SampleViewState extends State<SampleView> {
final localeManager = LocaleSharedManager.instance;
@override
void initState() {
super.initState();
initPrefences();
}
Future<void> initPrefences() async {
//call it in main dart
await LocaleSharedManager.instance.prefencesInit();
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: ElevatedButton(
onPressed: () {
localeManager.setStringValue(PreferenceKeys.NAME, 'vb10');
},
child: Text('Save @vb10')),
body: Text(localeManager.getStringValue(PreferenceKeys.NAME) ?? ''),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment