Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何使用Future<;布尔>;in小部件_Flutter_Dart - Fatal编程技术网

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