我在小部件树中遇到了 Flutter 路由和重复 GlobalKey 的问题。
我的应用程序执行以下操作:
Screen_A -> Screen_B -> Screen_C
在每种情况下,导航 (->) 都是通过以下方式完成的(其中 * 是 B 或 C):
Navigator.push(context, MaterialPageRoute(builder: (context) => Screen_*()));
然后我通过以下方式导航Screen_C -> Screen_A
:
Navigator.pushAndRemoveUntil(context,
MaterialPageRoute(builder: (context) => Screen_A()),
(Route<dynamic> route) => false);
最后,我Screen_A -> Screen_B
使用原始Navigator.push
方法进行导航。我收到以下错误:
'package:flutter/src/widgets/will_pop_scope.dart':断言失败:第 135 行 pos 12:'route == ModalRoute.of(context)':不正确。
小部件库捕获的异常:在小部件树中检测到重复的 GlobalKey。
作为参考,Screen_B
是我通过以下方式定义 GlobalKey 的一种形式:
GlobalKey<FormState> formKey = GlobalKey<FormState>();
我无法弄清楚为什么会发生这种情况。看来我在哪里定义 GlobalKey 以及我如何路由是正确的方式。不应该Navigator.pushAndRemoveUntil
删除路由堆栈历史记录,从而删除旧的 GlobalKeyScreen_B
吗?