Flutter-在获得预期的200之前总是收到错误的POST 400响应

问题描述 投票:0回答:1

我在Flutter中尝试获得对POST请求的正确响应时遇到了一些麻烦。这是我写的方法:

  Future<void> processUnload(String code) async {
    Map info = {
      'code': "$code",
    };

    try {
      var response = await http.post(
        url + "/unload/code",
        body: json.encode(info), headers: {
          "Content-Type": "application/json",
          "Authorization": "Bearer $token"
        }
      );

      if (response.statusCode == 200) {
        showUnloadOKMessage();
      } else {
        showUnloadNotOKMessage(response.body);
      }

    }catch (error) {

      if (error.toString().contains("Failed host lookup")) {
        notDelivered.add(OfflineCart(code, DateTime.now().toString()));
        showOfflineUnloadMessage();
      }

    }    
  }

  showUnloadOKMessage() {    
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title:
              Text('Unload OK.', style: TextStyle(color: Colors.green)),
          actions: <Widget>[
            FlatButton(
              child: Text('OK', style: botonGrandeRojo),
              onPressed: () {
                Navigator.of(context).pop();
                FocusScope.of(contextobuild).requestFocus(focusNode);
              },
            ),
          ],
        );
      },
    );
  }

  showUnloadNotOKMessage(String msg) {
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text(msg, style: TextStyle(color: Colors.red)),
          actions: <Widget>[
            FlatButton(
              child: Text('OK', style: botonGrandeRojo),
              onPressed: () {
                Navigator.of(context).pop();
                FocusScope.of(contextobuild).requestFocus(focusNode);
              },
            ),
          ],
        );
      },
    );
  }  

问题是,发出POST请求时,在获得实际和预期的response.statusCode == 200之前,我总是得到4或5 response.statusCode ==400。因此,应用程序始终显示4或5确定消息”,然后显示预期的“卸载确定”。

我已经阅读了很多异步/等待/然后的文章(Threading in FlutterUsing Futures Guide for BeginnersFlutter Async Loader),而且我很确定问题出在我编写代码的方式上,但是我可以因为我没有使用异步调用的经验,所以无法使其正常工作。

谢谢。

asynchronous flutter dart http-post
1个回答
0
投票

我发现了错误。问题是在setState()中多次调用processUnload方法。因此,我只需要添加一个标志以防止同时调用多次并删除setState():

© www.soinside.com 2019 - 2024. All rights reserved.