定义返回类型为
我有一个async函数:
Future decodeToken() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var token = await prefs.getString('token');
final Map<String, dynamic> payload = json.decode(
ascii.decode(
base64.decode(base64.normalize(token.split(".")[1])),
),
);
return payload;
}
当我尝试做do时:
var payload = await decodeToken();
它抛出一个错误,说" await表达式只能在异步函数中使用。">
我试着取出"等待"并打印有效载荷变量,但显然它打印的是&;Instance of future &;
如果我这样做:
decodeToken().then((value)=>print(value))
它正确打印值,但我想在变量中使用它,我如何返回异步函数的vvalue ?
错误消息说您只能在标记为async
的方法中使用await
,因此您正在从同步方法调用异步方法,而Dart不喜欢这样。
你有几个选项:
- 使用
Future...then
模式:
Map<String, dynamic> payload;
decodeToken().then((data) {
payload = data;
});
- 使周边方法
async
:
void foo() async {
var payload = await decodeToken();
}
- 使用
FutureBuilder
(如果您需要构建方法中的未来数据):
Widget build(BuildContext context) {
return FutureBuilder(
future: decodeToken(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
// Future hasn't completed yet, display something in the meantime
return CircularProgressIndicator();
}
// Future has completed, get data
var payload = snapshot.data;
...
},
);
}
定义返回类型为Future<Map<String, dynamic>>
Future<Map<String, dynamic>> decodeToken() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var token = await prefs.getString('token');
final Map<String, dynamic> payload = json.decode(
ascii.decode(
base64.decode(base64.normalize(token.split(".")[1])),
),
);
return payload;
}