我在我的提供者仓库中有一个Future函数。但是它是Future<bool>
,因为我需要async
来进行http请求。
Future<bool> hasCard() async {
String token = await getToken();
var body = jsonEncode({"token": token, "userID": user.getUserID()});
var res = await http.post((baseUrl + "/hasCard"), body: body, headers: {
"Accept": "application/json",
"content-type": "application/json"
});
print(res.toString());
if (res.statusCode == 200) {
this.paymentModel = PaymentModel.fromJson(json.decode(res.body));
return true;
}
return false;
}
在我的Widget中,我想检查这个值:
Widget build(BuildContext context) {
var user = Provider.of<UserRepository>(context);
if(user.hasCard())
{
//do something
}
但我得到一个错误消息:
条件必须具有静态类型'bool'. dart(non_bool_condition)
因为它是Widget
类型,我不能在这里使用async
。有什么方法可以解决这个问题?
2条答案
按热度按时间63lcw9qa1#
你可以使用一个
FutureBuilder
,它会根据future
的值来构建widget,在future
完成之前,这个值将为null。下面是一个例子。g6baxovj2#
好吧,不仅仅是
Future<bool>
,对于任何其他未来,你都可以使用FutureBuilder
,其中未来是返回你未来的类型,快照是从它接收的数据。我建议给你的bool赋值一个默认值。
祝你好运!