我有一个名为ThemeUtil的类
import 'package:shared_preferences/shared_preferences.dart';
class ThemeUtil {
SharedPreferences prefs;
bool initialized = false;
ThemeUtil() {
SharedPreferences.getInstance().then((val) {
prefs = val;
initialized = true;
});
}
bool getBrightness() {
if (initialized) {
try {
return prefs.getBool("dark") ?? false;
} catch (error) {
return false;
}
} else {
return null;
}
}
setBrightness(bool _dark) {
try {
prefs.setBool("dark", _dark);
} catch (error) {
return;
}
}
}
但是我的问题是当我在main.dart中使用它时,它始终返回false,这导致白色主题,因为尚未在ThemeUtil中创建共享首选项。有谁知道该如何解决?
答案 0 :(得分:1)
您面临的问题称为访问类实例。每次访问utils类时,都在创建该类的另一个类实例,在该类的构造函数中,您不断生成异步的新SharedPreferences实例。这就是为什么您总是得到错误的值的原因。我建议创建一个单例Utils类,在该类中您始终可以访问已分配的首选项。
export default {
watch: {
currentEvent(newValue) {
this.event = { ...newValue }
}
}
}
现在确保您在应用启动时初始化此单例:
class LocalStorage {
static final LocalStorage _instance = LocalStorage._privateConstructor();
factory LocalStorage() {
return _instance;
}
SharedPreferences _prefs;
LocalStorage._privateConstructor() {
SharedPreferences.getInstance().then((prefs) {
_prefs = prefs;
});
}
}
在最初创建SharedPreferences对象之后,您可以通过调用以下内容在应用程序中的任何位置同步访问其内容:
void main() {
LocalStorage();
runApp(MyApp());
}