|
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) ?? ''), |
|
); |
|
} |
|
} |