【问题标题】:Flutter SharedPreferences getBool function returns nullFlutter SharedPreferences getBool 函数返回 null
【发布时间】:2020-06-04 14:33:08
【问题描述】:

我有一个类,我在下面设置并获取 bool 值以记住用户并下次自动登录。

import 'package:shared_preferences/shared_preferences.dart';

class SettingHelper {
  static Future<bool> getValue(String key) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    var s = prefs.getBool(key);
    print("GetValue ${s.toString()}"); //prints "GetValue true"
    return s;
  }

  static Future<void> setValue(String key, bool value) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setBool(key, value);
  }
}

我在登录页面中使用 CheckBox 值设置了我的值。

onPressed: () {
...
SettingHelper.setValue("rememberMe", checkBoxValue);
...
}

当我开始调试时,我看到 setValue 有效。 但是当我热重启时,getValue 在 initState() 中返回 null,但在函数中返回 true。代码如下:

class LandingPage extends StatefulWidget {
  @override
  _LandingPageState createState() => _LandingPageState();
}

class _LandingPageState extends State<LandingPage> {
  bool rememberMe;

  void _getRememberMeChoice() async {
    rememberMe = await SettingHelper.getValue("rememberMe");
  }

  @override
  void initState() {
    super.initState();
    _getRememberMeChoice();
  }

  @override
  Widget build(BuildContext context) {
    print(rememberMe);  //Returns null
    if (rememberMe == true) {
      return BridgeList();
    } else
      return LoginScreen();
  }
}

这些是输出:

I/flutter (11724): null
I/flutter (11724): GetValue true

如果我做错了什么请告诉我...

【问题讨论】:

    标签: flutter dart sharedpreferences


    【解决方案1】:

    那是因为你不能等待 initState() 中的值

    在这种情况下,build() 函数在您获得 rememberMe 值之前执行。

    尝试在getValue() 之后添加setState((){}),以便进行重建。

    这样

    void _getRememberMeChoice() async {
        rememberMe = await SettingHelper.getValue("rememberMe");
        setState((){})
      }
    

    另外,请注意,在第一次执行 build 时,rememberMenull。因此,您应该在 if 条件中添加该验证。

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2020-01-22
      • 2019-07-31
      • 2020-10-23
      相关资源
      最近更新 更多