gpt4 book ai didi

flutter - Flutter接收Future数据(SharedPreferences)的问题

转载 作者:IT王子 更新时间:2023-10-29 07:15:57 26 4
gpt4 key购买 nike

我试图在 SharedPreferences 中保存 Switch 的值。这是我的代码:

  bool isDarkTheme;
static const String KEY_DARK_THEME = "dark";

void setTheme(bool value) async {
SharedPreferences pref = await SharedPreferences.getInstance();
isDarkTheme = value;
pref.setBool(KEY_DARK_THEME, isDarkTheme);
print("DARKSet? $isDarkTheme");
}

void getTheme() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
isDarkTheme = sharedPreferences.getBool(KEY_DARK_THEME);
print("dark? $isDarkTheme");
}

@override
void initState() {
// TODO: implement initState
super.initState();
print("MYINIT");
getTheme();
}

在 Build 方法中...

  @override
Widget build(BuildContext context) {
print("BUILD $isDarkTheme");
...
...
ListTile(
title: Text("Dark Theme"),
trailing: Switch(
value: isDarkTheme ?? false,
onChanged: (val) {
setState(() {
setTheme(val);
});
},
),
),
...
...
}

虽然我在调试控制台中得到了正确的值,但是 Switch 小部件没有相应地改变。我发现 build() 方法在从 SharedPrefernces 获取值之前运行,因此 Switch 小部件未从 SharedPreferences 获取值。如何解决接收Future值的问题?

最佳答案

你有两个选择

1).我想当你从 SharedPreference 获得值(value)时,你只需调用 setState() 方法

 void getTheme() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
setState(() {
isDarkTheme = sharedPreferences.getBool(KEY_DARK_THEME);
print("dark? $isDarkTheme");
});}

2) 您可以将 Provider 用于 StateManagement,这样,当 isDarkTheme 值更改时,将调用 notifyListener 并且您的构建方法是 rebuild,您会看到更改

关于flutter - Flutter接收Future数据(SharedPreferences)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57397415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com