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';
mixin PreferencesMixin {
void savePreference(key, value) async {
void savePreference(String key, dynamic value) async {
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();
if (prefs.containsKey(key)) {
final preference = prefs.getString(key);
return preference ?? false;
if (T == bool) {
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
void initState() {
super.initState();
getPreference(prefWorkingDirectory).then((pref) {
if (pref is String) {
setState(() {
Directory.current = pref;
});
Future.delayed(Duration.zero, () => _getVms(context)); // Reload VM list when we enter the page.
}
getPreference<String>(prefWorkingDirectory).then((pref) {
setState(() {
Directory.current = pref;
});
Future.delayed(Duration.zero, () => _getVms(context)); // Reload VM list when we enter the page.
});
refreshTimer = Timer.periodic(const Duration(seconds: 5), (Timer t) {

View File

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