Flutter SharedPreferences getBool函数返回null。

问题描述 投票:0回答:1

我有下面的类,我设置并获取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 visual-studio-code sharedpreferences
1个回答
0
投票

这是因为你不能在里面等待一个值。initState()

在这种情况下 build() 函数在你得到 rememberMe 值。

尝试添加一个 setState((){}) 之后 getValue(),所以你做一个重建。

像这样

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

另外,请注意,在第一个 build 执行, rememberMe 价值 null. 所以你应该在你的 if 状况。

© www.soinside.com 2019 - 2024. All rights reserved.