首页 > 解决方案 > 在小部件树中检测到 Flutter Duplicate GlobalKeys

问题描述

即使我的应用程序中只有一个 GlobalKey,我也会收到此错误。它在我的登录屏幕中。我查看了 StackOverflow 上的其他解决方案,这似乎是我的登录屏幕持续存在。我正在使用带有 CupertinoTabView/CupertinoTabBar 的 CupertinoApp。只要我在标签中导航,一切都很好。但是,一旦我通过选项卡导航到路线,就会引发此错误。

最近更新

进一步的调查使我相信该错误与登录 GlobalKey 无关,而与导航器有关。当我将 rootNavigator 设置为 true 时,该错误不会触发。例如,这是一个使用没有 rootNavigator 的 StreamBuilder 转换到屏幕的视频。

编码:

          Navigator.of(
          context,
          //rootNavigator: true,
        ).push<void>(
          CupertinoPageRoute(
            builder: (ctx) => MatchResultsScreen(widget.match),
          ),
        ),

错误被触发,但屏幕正确呈现。

现在这是一个将 rootNavigator 设置为 true 的视频。

编码:

          Navigator.of(
          context,
          rootNavigator: true,
        ).push<void>(
          CupertinoPageRoute(
            builder: (ctx) => MatchResultsScreen(widget.match),
          ),
        ),

现在没有错误,但是除非我进行热重载,否则流构建器不会呈现。

这显然是问题的原因。我为每个选项卡添加了一个 NavigatorState 键。每个都呈现为一个单独的 CupertinoTabView。

有人有什么建议吗?

标签: flutterdart

解决方案


试着给一个钥匙

StreamBuilder(key:UniqueKey(),..) 

也给主页和登录页面一个唯一的键,你可以像这样创建一个:

 final myKey = GlobalKey();

而且我认为您会继续构建造成问题的CupertinoApp

所以把它放在Streambuilder之上。和家使它成为 StreamBuilder(...)


推荐阅读