如何在颤动中返回异步函数的值?
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' 将被输出
【讨论】:
以上是关于如何在颤动中返回异步函数的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在函数中返回 CLLocationManager didUpdateLocations 的值?