如何在颤动中返回异步函数的值?

Posted

技术标签:

【中文标题】如何在颤动中返回异步函数的值?【英文标题】:How to return value on async function in flutter? 【发布时间】:2019-08-29 05:05:24 【问题描述】:

这是我的代码

SharedPreferences sharedPreferences;

  token() async 
    sharedPreferences = await SharedPreferences.getInstance();
    return "Lorem ipsum dolor";
  

当我打印时,我在调试控制台上收到了这条消息

Instance of 'Future<dynamic>'

我怎样才能得到“lorem ipsum...”的字符串?非常感谢

【问题讨论】:

有多种方法,但似乎您可能想阅读文档dartlang.org/tutorials/language/futures 请注意,SharedPreferences 不需要是异步的 【参考方案1】:

token() 是异步的,这意味着它返回Future。你可以得到这样的值:

SharedPreferences sharedPreferences;

Future<String> token() async 
  sharedPreferences = await SharedPreferences.getInstance();
  return "Lorem ipsum dolor";


token().then((value) 
  print(value);
);

但是有一个更好的方法来使用 SharedPreferences。检查文档here。

【讨论】:

【参考方案2】:

为了从异步函数中检索任何值,我们可以查看以下从异步函数返回字符串值的示例。此函数将来自 Firebase 的令牌作为字符串返回。

Future<String> getUserToken() async 
 if (Platform.isios) checkforIosPermission();
 await _firebaseMessaging.getToken().then((token) 
 return token;
 );

检查Ios权限的功能

void checkforIosPermission() async
    await _firebaseMessaging.requestNotificationPermissions(
        IosNotificationSettings(sound: true, badge: true, alert: true));
    await _firebaseMessaging.onIosSettingsRegistered
        .listen((IosNotificationSettings settings) 
      print("Settings registered: $settings");
    );

在getToken函数中接收返回值

Future<void> getToken() async 
  tokenId = await getUserToken();


print("token " + tokenId);

【讨论】:

【参考方案3】:

只要函数是async,您需要使用 await 来响应它,否则 Instance of 'Future' 将被输出

【讨论】:

以上是关于如何在颤动中返回异步函数的值?的主要内容,如果未能解决你的问题,请参考以下文章

在颤动的异步函数中捕获 PlatformException

当for内部有查询时如何返回异步函数的值

如何在函数中返回 CLLocationManager didUpdateLocations 的值?

如何将包装在 Promise 中的值传递给非异步函数? [复制]

nodejs如何从异步回调函数返回想要的值

如何对从包含异步的函数返回的值使用 List.sort?