Flutter Multiple widgets used the same GlobalKey“.

最近在做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

完毕!


版权声明:本文为lxd_love_lgc原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。