处理http请求时如何修复“在null上调用的方法'取消'”

Posted

技术标签:

【中文标题】处理http请求时如何修复“在null上调用的方法\'取消\'”【英文标题】:How to fix "the method 'cancel' called on null" while working with http requests flutter处理http请求时如何修复“在null上调用的方法'取消'” 【发布时间】:2019-10-15 06:34:01 【问题描述】:

我正在尝试使用来自 Flutter 应用程序的 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()));
    

    

══╡ 小部件库发现异常╞═══════════════════════╕═══╕═␕═════════════════ ═════════════════════ I/flutter (29517):在完成小部件树时引发以下 NoSuchMethodError: I/flutter (29517):在 null 上调用了方法“取消”。 I/颤振(29517):接收器:空 I/flutter (29517):尝试调用:cancel() I/flutter (29517): 抛出异常时,这是堆栈:

【问题讨论】:

能否在http.post中加一个try/catch,看看有没有错误 @Hosar 我会非常感谢你 @Hosar http.post 运行良好,但它仍然给我同样的错误:( 发布您的整个代码。你在哪里打电话取消? @RubensMelo 我没有在我的代码中调用取消函数,我认为它与 disposite 方法有关,非常感谢您抽出时间并尝试解决此问题 【参考方案1】:

我的建议是看看你的 dispose 方法。在那里,您可能会注意到一条语句调用了取消方法,该方法从未启动或使用过,仅声明过。就我而言,我收到此错误是因为在处置方法中我试图取消对我未使用的 Firebase 服务的订阅。我从来没有给它附加一个监听器,因此当试图取消它时,Flutter 抱怨说“取消方法是在 null 上调用的”。我在 dispose 方法中删除了不必要的行并解决了错误。希望解释对某人有所帮助。

【讨论】:

这为我解决了,我不小心在 dispose 方法中添加了一个空对象并在其上调用了取消。

以上是关于处理http请求时如何修复“在null上调用的方法'取消'”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复来自 Axios 的随机 http 请求(404 响应)

在使用CefSharp处理身份验证请求时,如何在关闭时修复无限对话循环

如何在管理面板中修复“处理您的请求时出错 :: 指定无效父 ID (Magento_Backend::mgs)”..?

发布到 Google 脚本时如何修复“HTTP 405”?

如何修复对 etherpad 的 $http.get 请求上的“403(禁止)”

如何修复“客户端身份验证方案‘匿名’禁止 HTTP 请求”