![](/img/trans.png)
[英]Flutter + SharedPreferences: a build function returned 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
执行中, rememberMe
值将是null
。 因此,您应该在if
条件中添加该验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.