Skip to content

Specific rebuild sequence throws 'Multiple widgets used the same GlobalKey' exception #43780

@krisgiesing

Description

@krisgiesing

The test at https://gist.github.com/krisgiesing/afd4c3bd82458f8eeba847fe2cc7b08d appears to be legal. However, running it throws the following exception:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building _Stateful-[GlobalKey#bdeee 2](state:
_StatefulState#6790b):
Multiple widgets used the same GlobalKey [GlobalObjectKey String#77ca8].
The key [GlobalObjectKey String#77ca8] was used by multiple widgets. The parents of those widgets
were:
- _Stateful-[GlobalKey#e2abd 1](state: _StatefulState#5e00d)
- _Stateful-[GlobalKey#bdeee 2](state: _StatefulState#6790b)
A GlobalKey can only be specified on one widget at a time in the widget tree.

Widget creation tracking is currently disabled. Enabling it enables improved error messages. It can
be enabled by passing `--track-widget-creation` to `flutter run` or `flutter test`.

When the exception was thrown, this was the stack:
#0      GlobalKey._debugReserveFor.<anonymous closure> (package:flutter/src/widgets/framework.dart:189:11)
#1      GlobalKey._debugReserveFor (package:flutter/src/widgets/framework.dart:212:6)
#2      Element.updateChild.<anonymous closure> (package:flutter/src/widgets/framework.dart:2905:13)
#3      Element.updateChild (package:flutter/src/widgets/framework.dart:2909:6)
#4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4016:16)
#5      Element.rebuild (package:flutter/src/widgets/framework.dart:3793:5)
#6      StatefulElement.update (package:flutter/src/widgets/framework.dart:4181:5)
#7      Element.updateChild (package:flutter/src/widgets/framework.dart:2926:15)
#8      SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5210:14)
#9      Element.updateChild (package:flutter/src/widgets/framework.dart:2926:15)
#10     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4919:32)
#11     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5319:17)
#12     Element.updateChild (package:flutter/src/widgets/framework.dart:2926:15)
#13     _LayoutBuilderElement._layout.<anonymous closure> (package:flutter/src/widgets/layout_builder.dart:115:18)
#14     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2355:19)
#15     _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:95:11)
#16     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1815:58)
#17     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:875:15)
#18     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1815:13)
#19     RenderConstrainedLayoutBuilder.layoutAndBuildChild (package:flutter/src/widgets/layout_builder.dart:173:5)
#20     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:240:5)
#21     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1584:7)
#22     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:844:18)
#23     AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:974:23)
#24     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:279:5)
#25     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1043:15)
#26     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:982:9)
#27     AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:869:9)
#30     TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:69:41)
#31     AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:856:27)
#32     WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:320:22)
#35     TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:69:41)
#36     WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:317:27)
#37     main.<anonymous closure>.<anonymous closure> (file:///Users/kgiesing/Code/turquoise/flutter/packages/flutter/test/material/key_test.dart:62:20)
#51     AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1063:17)
#53     AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1051:35)
(elided 33 frames from class _FakeAsync, package dart:async, package dart:async-patch, and package stack_trace)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions