我想保存一个可以在新类中重用的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);
}
}
这个问题可能是因为你没有await
的SharedPreferences.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();
}
},
),