【问题标题】:Flutter: Await HTTP Request going in loopFlutter:等待 HTTP 请求进入循环
【发布时间】:2020-08-15 01:44:42
【问题描述】:

我在执行 http 异步请求时遇到了奇怪的问题。我知道它失败的原因,但不知道如何解决它。 这是我的代码。

    Future userLogin() async{
 try{
    String email = emailController.text;
    String password = passwordController.text;
    var url = 'http://192.168.100.4:8080/myapp/loginnexec.php';

      // Store all data with Param Name.
      var data = {'email': email, 'password' : password };
     print(data);
      // Starting Web API Call.
      var response = await http.post(url, body: json.encode(data));

      // Getting Server response into variable.

      final message = loginFromJson(response.body);
    if(response.statusCode == 200){
        setState(() {
          visible = false;
        });

      }

    }
     }catch(e){
     .....
     }
    }

如果我的网络服务器已关闭或文件不可用,那么它将进入无限循环。我的意思是,我一直都能看到相同的 JSON 数据(var data = {'email': email, 'password': password }。

我想知道如何防止它进入循环。看起来它正在尝试访问网络服务器以获取数据,如果它没有获取数据然后再试一次。

我不确定我的解释是否正确。

对不起,我的英语不好。

【问题讨论】:

  • 你能分享一下,从哪里调用这个方法“userLogin”
  • @ShudiptoTrafder 我从按钮点击事件中调用它。
  • 那么,你想要什么?经过一番尝试,它应该停止吗?
  • 你的 try 块在哪里?
  • @VirenVVarasadiya 我希望它在一些尝试或一些超时选项后停止。当我上次运行它时,它运行了 20 多次,然后我手动停止了它。

标签: flutter dart


【解决方案1】:

您可以在Future 上设置timeout,以便在一定时间后解决:

await http.post('someurl').timeout(Duration(seconds: 5),onTimeout: (){
    throw Exception();
    //or you can also
    // return null;
  });

【讨论】:

  • 感谢爱。让我试试这个。投票赞成。
  • 而不是这个 throw Exception();我可以显示警报或小吃吧吗?
  • 成功了。它在 5 秒内超时,我可以展示一个关于它的小吃店。万分感谢。已接受答案。
猜你喜欢
  • 1970-01-01
  • 2021-06-04
  • 2017-07-30
  • 1970-01-01
  • 2019-01-08
  • 2017-11-24
  • 2018-11-13
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多