如何从异步方法返回?

时间:2018-07-16 22:21:07

标签: dart flutter

基于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()的值?

1 个答案:

答案 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
});