繁体   English   中英

Flutter SharedPreferences getBool function 返回 null

[英]Flutter SharedPreferences getBool function returns null

我有 class 下面我设置并获取布尔值以记住用户并下次自动登录。

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 但在 function 中返回 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

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

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

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

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

像这样

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM