GetInt在null上被调用

我在flutter中对sharedPreferences做错了什么吗?

SharedPreferences prefs;
int score;
int storedScore;
final String uid;
StoredData(this.uid) {
_initialize();
_readValues();
}

_initialize() async {
prefs = await SharedPreferences.getInstance();}

_readValues() {
score = prefs.getInt("score") ?? 0;
storedScore = prefs.getInt("storedScore") ?? 0;}

错误: I / flutter(18698):方法'getInt'在null上调用。 I / flutter(18698):接收者:null I / flutter(18698):尝试调用:getInt(“ score”) 相关的引起错误的小部件是: I / flutter(18698):主屏幕文件:/// D:/flutter/trivia_iq/trivia_iq/lib/main.dart:24:33

这不在main.dart文件中,但是我正在获取。 任何帮助将不胜感激。

评论
kquam
kquam

这给出了null,因为到目前为止尚未创建共享首选项对象对象,而您正在某处使用它。

您必须在等待一些后台工作的同时添加Future。

  Future<Void> _initialize() async {
    prefs = await SharedPreferences.getInstance();
  }

调用函数如下:

_initialize().then((value) => _readValues());
点赞
评论
再次邂逅i
再次邂逅i

在“ StoredData()”构造函数中,调用“ _initialize()”方法时也应使用await:

await _initialize();

如果不是,则在尚未初始化sharedPreferences时将调用“ _readValues()”。

但是由于不允许在构造函数上使用async,因此您应该像这样更改initialize():

_initialize() async {
prefs = await SharedPreferences.getInstance();
score = prefs.getInt("score") ?? 0;
storedScore = prefs.getInt("storedScore") ?? 0;
}
点赞
评论