我如何从我的异步函数返回值?



我有一个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不喜欢这样。

你有几个选项:

  1. 使用Future...then模式:
Map<String, dynamic> payload;
decodeToken().then((data) {
payload = data;
});
  1. 使周边方法async:
void foo() async {
var payload = await decodeToken();
}
  1. 使用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;
}

相关内容

  • 没有找到相关文章