处理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)”..?