我的问题很简单,他们是一个布尔变量x,它需要从共享首选项中发出一个标志,告诉应用程序它是暗模式还是亮模式主题。
这里的问题是我无法为其分配默认值,就好像我每次启动应用程序时都会使用默认值来设置主题的值。
关于栈的类似问题表明如果x的值为null,则在应用加载程序之前是一个很好的解决方案。但是我需要x从支架上拿出来,而不是一开始就放在一边。您可以在下面看到代码,这些代码可以帮助您了解我的问题。
错误代码仅在ios上显示1秒钟或更短时间,但可见。在android上,我没有遇到这个问题。至少在我的设备上 在那一秒之后我没问题。
我尝试过的是提供默认值,但它没有如上所述起作用。
bool x;
@override
void initState() {
// TODO: implement initState
super.initState();
ThemeChanger.currentState().then((val) {
print("value of val: $val");
setState(() {
x = val;
});
});
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<ThemeChanger>(
builder: (_) => ThemeChanger((x) ? ThemeChanger.customDarkTheme : ThemeChanger.customLightTheme),
child: new MaterialAppWithTheme(),
);
}
有没有一种方法可以让我更快地使用共享首选项,或者在此代码之前显示加载屏幕/循环进度,并等待将来从共享首选项中获取价值?
答案 0 :(得分:0)
我认为答案为时已晚,但这是解决方案: 在dart中,您不能将布尔值声明为null,因此必须定义true或false。
布尔x = true;