Made PreferencesMixin generic

This commit is contained in:
Yannick Mauray 2021-11-10 22:06:27 +01:00
parent 66c0e5fae8
commit b37600f7e1
No known key found for this signature in database
GPG Key ID: 67C4AAC5E99CB909
3 changed files with 40 additions and 18 deletions

View File

@ -1,16 +1,42 @@
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
mixin PreferencesMixin { mixin PreferencesMixin {
void savePreference(key, value) async { void savePreference(String key, dynamic value) async {
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
prefs.setString(key, value); if (value is bool) {
prefs.setBool(key, value);
} else if (value is double) {
prefs.setDouble(key, value);
} else if (value is int) {
prefs.setInt(key, value);
} else if (value is String) {
prefs.setString(key, value);
} else if (value is List<String>) {
prefs.setStringList(key, value);
}
} }
Future getPreference(key) async { Future<T?> getPreference<T>(String key) async {
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
if (prefs.containsKey(key)) { if (prefs.containsKey(key)) {
final preference = prefs.getString(key); if (T == bool) {
return preference ?? false; return prefs.getBool(key) as T;
} else if (T == double) {
return prefs.getDouble(key) as T;
} else if (T == int) {
return prefs.getInt(key) as T;
} else if (T == String) {
return prefs.getString(key) as T;
} else if (T == List) {
return prefs.getStringList(key) as T;
}
}
}
Future<void> deletePreference(String key) async {
final prefs = await SharedPreferences.getInstance();
if (prefs.containsKey(key)) {
prefs.remove(key);
} }
} }
} }

View File

@ -27,13 +27,11 @@ class _ManagerState extends State<Manager> with PreferencesMixin {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
getPreference(prefWorkingDirectory).then((pref) { getPreference<String>(prefWorkingDirectory).then((pref) {
if (pref is String) { setState(() {
setState(() { Directory.current = pref;
Directory.current = pref; });
}); Future.delayed(Duration.zero, () => _getVms(context)); // Reload VM list when we enter the page.
Future.delayed(Duration.zero, () => _getVms(context)); // Reload VM list when we enter the page.
}
}); });
refreshTimer = Timer.periodic(const Duration(seconds: 5), (Timer t) { refreshTimer = Timer.periodic(const Duration(seconds: 5), (Timer t) {

View File

@ -16,12 +16,10 @@ class _DownloaderMenuState extends State<DownloaderMenu> with PreferencesMixin {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
getPreference(prefWorkingDirectory).then((pref) { getPreference<String>(prefWorkingDirectory).then((pref) {
if (pref is String) { setState(() {
setState(() { Directory.current = pref;
Directory.current = pref; });
});
}
}); });
} }