Flutter 如何使用Future<;布尔>;in小部件
我的提供者存储库中有一个未来的函数。然而,它是Flutter 如何使用Future<;布尔>;in小部件,flutter,dart,Flutter,Dart,我的提供者存储库中有一个未来的函数。然而,它是未来的,因为我需要异步进行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:
未来的
,因为我需要异步
进行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;
}
Future hasCard()异步{
字符串标记=等待getToken();
var body=jsonEncode({“token”:token,“userID”:user.getUserID()});
var res=await http.post((baseUrl+“/hasCard”),body:body,headers:{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”
});
打印(res.toString());
如果(res.statusCode==200){
this.paymentModel=paymentModel.fromJson(json.decode(res.body));
返回true;
}
返回false;
}
在我的小部件中,我想检查这个值:
Widget build(BuildContext context) {
var user = Provider.of<UserRepository>(context);
if(user.hasCard())
{
//do something
}
小部件构建(构建上下文){
var user=Provider.of(上下文);
if(user.hasCard())
{
//做点什么
}
但我收到一条错误消息:
条件必须具有静态类型“bool”。dart(非bool\u条件)
由于它是一个
小部件
类型,我不能在这里使用异步
。解决这个问题的方法是什么?您可以使用未来构建器
,它将根据未来
值构建小部件,该值在未来
完成之前为空。下面是一个示例
FutureBuilder(
future: hasCard(),
builder: (context, snapshot) {
if (snapshot.data == null)
return Container(
width: 20,
height: 20,
child: CircularProgressIndicator());
if (snapshot.data)
return Icon(
Icons.check,
color: Colors.green,
);
else
return Icon(
Icons.cancel,
color: Colors.red,
);
},
)
不仅对于
未来
对于任何其他未来,您可以使用FutureBuilder
,其中未来将返回您的未来类型,快照是从中接收到的数据
FutureBuilder(
future: hasCard(),
builder: (context, snapshot) {
if (snapshot.data != null){
print(snapshot.data)}
else{
print("returned data is null!")}
},
)
我建议给你的bool指定一个默认值
祝你好运!你应该使用futurebuilder,在那里等待数据时可以显示progresshud