我如何在颤振sharedpreferences中正确存储整数而不获得null?



我想保存一个可以在新类中重用的Int。我用的是SharedPreferences。问题是,当我想在新页面上打开Int时,我只得到一个空值。但我注意到,当我做一个热重启,然后切换到页面没有空出来,但我之前保存。我的错误在哪里?

这里保存值:

Future<Album> fetchAlbum() async {
int msgId;
//I fetch json from a page and store the value at msgId. I just don't have it in my code sample in here 
SharedPreferences prefs = await SharedPreferences.getInstance();
msgId = (prefs.getInt('msgId'));
msgId = (prefs.getInt('msgId') ?? jsonData[0]["msgId"]);
prefs.setInt('msgId', msgId);
}

这里我检索保存的值(在新页面上):

String url ='MyUrl';
int msgId;
// int intMsgId;
_loadCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
msgId = (prefs.getInt('msgId'));
prefs.setInt('msgId', msgId);
print(msgId);
});
}
Future<String> makeRequest(String text) async {
_loadCounter();
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
msgId = (prefs.getInt('msgId'));
prefs.setInt('msgId', msgId);
print(msgId);
});
print("------MSG_ID------");
print(msgId);
print("------MSG_ID------");
//print(msgId.length);
if (msgId != null) {
var response = await http.post(Uri.encodeFull(url),
headers: {
"x-requested-with": "xmlhttprequest",
"Accept": "application/json",
"content-type": "application/json",
},
body: jsonEncode({
"messages": {
"msgId": msgId,
"refId": msgId
}
}));
print(response.body);
}
}

这个问题可能是因为你没有awaitSharedPreferences.setInt方法。

代码:

prefs.setInt('msgId', msgId);

更改为:

await prefs.setInt('msgId', msgId);

因为SharedPreferences.setInt是异步的。

在您的情况下,我会这样做:


// other UI code
child: FutureBuilder(
future: prefs.getInt('msgId'), // your future
builder: (context, snapshot) {
if (snapshot.hasData) {

return Center(child: Container(child: Text('data: ${snapshot.data}')));
} else {
// We can show the loading view until the data comes back.

return CircularProgressIndicator();
}
},
),

最新更新