Flutter “如何修复”;方法';取消';在空时调用";在处理http请求时

Flutter “如何修复”;方法';取消';在空时调用";在处理http请求时,flutter,flutter-layout,flutter-dependencies,flutter-animation,flutter-test,Flutter,Flutter Layout,Flutter Dependencies,Flutter Animation,Flutter Test,我正试图从一个颤振应用程序中使用API进行提示,但每次单击“登录”按钮时都会出现这些错误 final resp = await http.post("http://192.168.73.5/myserv/login.php", body: { "login": "login", "apid": "re0b53fd92d4b1593db1880az322d66ea9d4", "email": _email, "pass":

我正试图从一个颤振应用程序中使用API进行提示,但每次单击“登录”按钮时都会出现这些错误

      final resp = await http.post("http://192.168.73.5/myserv/login.php", body: {
        "login": "login",
        "apid": "re0b53fd92d4b1593db1880az322d66ea9d4",
        "email": _email,
        "pass": _password,
      });
      var __data =json.decode(resp.body);

      if (__data.length == 0) {
      final snackbar = SnackBar(
        content: Text('Server error'),
      );
      scaffoldKey.currentState.showSnackBar(snackbar);
    } else if (__data[0]['resp'] == 'error') {
      final snackbar = SnackBar(
        content: Text('Password or email is incorrect!'),
      );
      scaffoldKey.currentState.showSnackBar(snackbar);
    } else if (__data[0]['resp'] == 'sucess') {
      final snackbar = SnackBar(
        content: Text('You are logged in'),
      );
      scaffoldKey.currentState.showSnackBar(snackbar);
      Navigator.of(context)
          .pushReplacement(MaterialPageRoute(builder: (context) => HomeApp()));
    }

    }
══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════ I/flatter(29517):在完成小部件树时抛出以下NoSuchMethodError: I/flatter(29517):对null调用了方法“cancel”。 I/颤振(29517):接收器:空 I/flatter(29517):尝试呼叫:取消()
I/flatter(29517):抛出异常时,这是堆栈:

我的建议是查看您的dispose方法。在这里,您可能会注意到一条语句调用了一个cancel方法,该方法从未启动或使用过,只是声明过。在我的例子中,我得到这个错误是因为在disposed方法中,我试图取消对我没有使用的Firebase服务的订阅。我从未将侦听器附加到它,因此当尝试取消它时,Flatter抱怨说“方法cancel在null上被调用”。我删除了dispose方法中不必要的行,错误得到了解决。希望解释能对某人有所帮助。

你能在
http.post
中添加一个
try/catch
,看看有没有errors@Hosar我会的,谢谢你much@Hosarhttp.post工作正常,但仍然会给我相同的错误:(发布你的全部代码。你在哪里调用了cancel?@RubensMelo我的代码中没有调用cancel函数,我认为它与disposite方法有关,非常感谢你花了这么多时间来解决这个问题。这为我解决了这个问题,我不小心在dispose方法中添加了一个空对象并调用了cancel。