所以我有一个异步函数:
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;
}
当我尝试这样做时:
var payload = await decodeToken();
它抛出一个错误,指出“await 表达式只能在异步函数中使用。”
我尝试取出“await”并打印有效载荷变量,但显然它打印了“Instance of Future”
如果我这样做:
decodeToken().then((value)=>print(value))
它正确打印了值,但我想在变量中使用它,如何返回异步函数的 vvalue?
答案 0 :(得分:2)
错误消息说您只能在标记为 #tippy-1
的方法中使用 await
,因此您正在从同步方法调用异步方法,而 Dart 不喜欢那样。< /p>
您有多种选择:
async
模式:Future...then
Map<String, dynamic> payload;
decodeToken().then((data) {
payload = data;
});
:async
void foo() async {
var payload = await decodeToken();
}
(如果您需要在构建方法中使用未来的数据):FutureBuilder
答案 1 :(得分:0)
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;
}