flutter - 在小部件树中检测到 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。
有人有什么建议吗?
解决方案
试着给一个钥匙
StreamBuilder(key:UniqueKey(),..)
也给主页和登录页面一个唯一的键,你可以像这样创建一个:
final myKey = GlobalKey();
而且我认为您会继续构建造成问题的CupertinoApp。
所以把它放在Streambuilder之上。和家使它成为 StreamBuilder(...)
推荐阅读
- django-rest-framework - 使用 drf-nested-routers 的嵌套超链接的视图名称不正确
- java - 无效的 UUID 字符串:1
- vhdl - 如何减少 VHDL 设计中的 ALM 数量?
- ios - 从 XIB 创建自定义视图时,我们应该更喜欢使用 Bundle.main 还是 UINib?
- netlogo - NetLogo BehaviorSpace 崩溃 NetLogo
- javascript - 表上带有 ajax 调用的 Td 文本不清除以前的数据
- python - 为什么我的基本 CNN 模型没有过拟合分割图像数据集?
- django - 使用 Django 的 RingCentral OAuth
- java - 找不到 tools.jar。请检查 C:\Program Files\Java\jre1.8.0_271 是否包含有效的 JDK 安装
- python - 如何在使用字典列表而不是查询集填充 django-tables2 后对其进行过滤?