最近在做Fluuter 项目的时候,跳转了几个页面返回之后就遇到报错了,查了半天都没有查到有用的,最后自己一点点试,才解决,所以在这里记录一下,免得以后遇到有得查半天。
报错信息:
在网上查到的解决方法:
1、首先检查以下同一个GlobalKey
有没有被多处使用,如果问题没解决请继续往下看;
2、检查route
(路由)是否正确,也就是同一个路由是否被push
了两次,如果问题还没解决,请接着往下看;
然而这样模糊的答案对我这种菜鸟明显不适用。。。。
最后几经折腾,终于到达问题的原因:
//关闭软件盘
FocusScope.of(context).requestFocus(FocusNode());
这就是罪魁祸首。
我的情况:
1、首先从A 跳转到 B ,再从 B 跳转 C
2、然后从 C 返回 B没有问题,再从B 返回 A,报错了
为什么呢?
因为在 C 页面有输入操作
,而我在 void dispose()
中做了关闭软键盘操作
@override
void dispose() {
//关闭软件盘
FocusScope.of(context).requestFocus(FocusNode());
super.dispose();
}
这时会有个问题,当我只是进入这个页面,但是没有调起软件盘的话,当调用 Navigator.pop(context);
关闭页面的时候,还会做一次 关闭软件盘
操作,但其实软件盘
本来就是关闭的,这样等于做了两次关闭页面操作。所以报错了。
那么解决方法就简单了:
1、直接去掉 FocusScope.of(context).requestFocus(FocusNode());
这行 代码
2、监听软件盘
显示状态,只有当软件盘开启的时候才去做关闭操作
flutter 监听软键盘的弹出和关闭:https://blog.csdn.net/lxd_love_lgc/article/details/106614786
完毕!