我使用以下功能从Web服务获取用户ID
Future<String> getUserid() async {
final storage = new FlutterSecureStorage();
// Read value
String userID = await storage.read(key: 'userid');
return userID;
}
使用此功能时发生错误
类型'Future'不是类型转换类型'字符串'的子类型
这就是我尝试过的
otherFunction() async {
final String userID = await getUserid();
return userID;
}
Future<String> getUserid() async {
final storage = new FlutterSecureStorage();
// Read value
String userID = await storage.read(key: 'userid');
return userID;
}
print(otherFunction());
静止错误消息显示为
I / flutter(18036):“未来”的实例
答案 0 :(得分:2)
您将需要等待。如果您完全不了解 Dart 中的Future
,则应通读this comprehensive article。
在 Flutter 中,现在有两种方法可以处理这种情况。您想在常规其他函数中调用函数。在这种情况下,您可以将该函数标记为async
或使用getUserid().then((String userID) {...})
。如果要使用async
,则还需要使用await
:
otherFunction() async {
...
final String userID = await getUserid();
...
}
但是,在Flutter中的 中,您很有可能希望在小部件的 build
方法中使用您的值。在这种情况下,您应该使用FutureBuilder
:
@override
Widget build(BuildContext context) {
return FutureBuilder(future: getUserid(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (!snapshot.hasData) return Container(); // still loading
// alternatively use snapshot.connectionState != ConnectionState.done
final String userID = snapshot.data;
...
// return a widget here (you have to return a widget to the builder)
});
}