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

完毕!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值