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;
    }