基于SharedPreferences类,我尝试像这样检索首选项值:
String loadIPAddress() {
SharedPreferences.getInstance().then((SharedPreferences prefs) {
try {
var loadedValue = prefs.getString('serverIPAddress');
print('loadIPAddress <= ' + loadedValue);
return loadedValue; // [1]
} catch (e) {
print('loadIPAddress <= NOPE');
return '---'; [2]
}
});
}
不幸的是,这不会每次都返回值。
问:1和[2]返回语句是否返回loadIPAddress()的值?
答案 0 :(得分:1)
不,您猜到了,这些返回是从then
回调返回的。
要从loadIPAddress
返回,请像这样重构它:
Future<String> loadIPAddress() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
try {
var loadedValue = prefs.getString('serverIPAddress');
print('loadIPAddress <= ' + loadedValue);
return loadedValue;
} catch (e) {
print('loadIPAddress <= NOPE');
return '---';
}
}
请注意,使loadIPAddress
处于异步状态后,它现在返回一个Future,因此您应该这样称呼它:
String ip = await loadIPAddress();
// or
loadIPAddress().then((String ip) {
// do something with ip - probably setState
});