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

标签 flutter sharedpreferences future

我试图在 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/

相关文章:

flutter - 如何为 futurebuilder 调用 setState

dart - 如何在Dart中通过 `this`获取当前的类实例并分配给final属性

android - Flutter:gradle build failed with error "A problem occurred evaluating root project ' android' > 配置项目 ':app' 时出现问题。”

java - 将微调器选择保存到共享首选项

java - executorService.submit(Runnable) 返回的 future 对象是否包含对可运行对象的任何引用?

flutter - 使用 ListTile() 将从 Api 加载的图像排列到 Flutter 中的两列

java - 在共享首选项中保存自定义对象

java - 检查 wifi 是否启用和共享首选项

Flutter、Dart 和 Future。这是 Dart Futures 的已知功能并且为空吗?

scala - 如何验证异步方法中的mockito调用