【问题标题】:My "If" statement doesn't work in dart/flutter我的“If”语句在 dart/flutter 中不起作用
【发布时间】:2021-04-11 10:45:06
【问题描述】:

我在 futureBuilder 中有一个 if 语句,但它没有返回任何内容。 再加上我的 futureBuilder 它没有模型,你不应该为它定义模型。 当我的代码为真时,它会发送一个手机号码的代码,然后它不会导航到另一个页面。 这里是:

onTap: () {
                                      final ID = _controller.text;
                                      final url = "https://************/api/User/CheckHasUser?id=$ID";
                                      Future fetchLogin() async {
                                        final response = await http.get(url);
                                        if (response.statusCode == 200) {
                                          return jsonDecode(response.body);
                                        } else {
                                          throw Exception('Failed');
                                        }
                                      }
                                      var Id = ID != null ? true : false;
                                      FutureBuilder(
                                        future: fetchLogin(),
                                        builder: (context, snapshot){
                                          if(Id == true){
                                            Navigator.of(context).push(MaterialPageRoute(
                                              builder: (context) => getCodePage(),
                                            ));
                                          }else{
                                            print('s');
                                          }
                                        },
                                      );
                                    },

【问题讨论】:

    标签: android ios flutter dart


    【解决方案1】:

    FutureBuilder 是一个小部件,用于对未来结果做出反应或在等待时显示加载动画。它的 builder-Function 应该根据快照返回一个 Widget。但是您的 FutureBuilder 不在 Widget 树中的任何位置,因此它没有被构建并且什么都不做。 如果您只想对 Future 的完成及其结果做出反应,请改用 fetchLogin().then(...)

    编辑: 您的代码没有 FutureBuilder:

        final ID = _controller.text;
        final url = "https://************/api/User/CheckHasUser?id=$ID";
        Future fetchLogin() async {
            final response = await http.get(url);
            if (response.statusCode == 200) {
               return jsonDecode(response.body);
            } else {
               throw Exception('Failed');
            }
       }
       var Id = ID != null;
       fetchLogin().then((resultOfFuture){
         if(Id){
            Navigator.of(context).push(
               MaterialPageRoute(
                  builder: (context) => getCodePage(),
               ));
            }else{
               print('s');
            }
         }
       );
    

    我希望这可以进一步帮助你:)

    【讨论】:

    • 非常感谢,但请您举一个关于我的代码的例子吗?
    • 再次感谢您,我还有一个问题。什么是“未来的结果”?它对我来说只返回 FALSE。
    • resultOfFuture 是你未来的结果。因此,在您的示例中,如果 statusCode 为 200,则为 jsonDecode(response.body) 的结果。
    猜你喜欢
    • 2016-02-17
    • 2014-03-21
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2022-12-31
    • 2012-07-16
    相关资源
    最近更新 更多