Repository navigation
setState in LayoutBuilder callback gives incomprehensible exception #5820
Copy link
Copy link
Closed
Labels
frameworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.waiting for PR to land (fixed)A fix is in flightA fix is in flight
Description
Test code:
Future main() async {
runApp(new Foo());
}
class Foo extends StatefulWidget {
Foo({Key key}) : super(key: key);
@override
FooState createState() => new FooState();
}
class FooState extends State<Foo> {
@override
Widget build(BuildContext context) => new LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
setState(() {});
return new Container();
},
);
}Exception:
10:15:52.486: I/flutter : ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
10:15:52.491: I/flutter : The following assertion was thrown during performLayout():
10:15:52.499: I/flutter : 'package:flutter/src/widgets/framework.dart': Failed assertion: line 1539 pos 16:
10:15:52.502: I/flutter : '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)' is not true.
10:15:52.525: I/flutter : When the exception was thrown, this was the stack:
10:15:52.536: I/flutter : #2 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:1539:16)
10:15:52.538: I/flutter : #3 _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:102:11)
10:15:52.540: I/flutter : #4 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1644:58)
10:15:52.543: I/flutter : #5 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:896:15)
10:15:52.546: I/flutter : #6 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1644:13)
10:15:52.548: I/flutter : #7 _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:201:5)
10:15:52.551: I/flutter : #8 RenderObject.layout (package:flutter/src/rendering/object.dart:1546:21)
10:15:52.553: I/flutter : #9 RenderView.performLayout (package:flutter/src/rendering/view.dart:113:13)
10:15:52.556: I/flutter : #10 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1424:21)
10:15:52.559: I/flutter : #11 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:874:18)
10:15:52.561: I/flutter : #12 BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding.beginFrame (package:flutter/src/rendering/binding.dart:202:19)
10:15:52.564: I/flutter : #13 BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding&WidgetsBinding.beginFrame (package:flutter/src/widgets/binding.dart:297:23)
10:15:52.567: I/flutter : #14 BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:147:5)
10:15:52.570: I/flutter : #15 BindingBase&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:608:15)
10:15:52.573: I/flutter : #16 BindingBase&SchedulerBinding.handleBeginFrame (package:flutter/src/scheduler/binding.dart:543:9)
10:15:52.575: I/flutter : #17 runApp (package:flutter/src/widgets/binding.dart:363:7)
10:15:52.578: I/flutter : #18 main.<main_async_body> (<redacted>/lib/main.dart:14:3)
10:15:52.580: I/flutter : (elided 5 frames from class _AssertionError and package dart:async)
10:15:52.582: I/flutter : The following RenderObject was being processed when the exception was fired:
10:15:52.584: I/flutter : _RenderLayoutBuilder NEEDS-LAYOUT
10:15:52.587: I/flutter : This RenderObject had the following creator information:
10:15:52.589: I/flutter : LayoutBuilder ← Foo ← [root]
10:15:52.591: I/flutter : This RenderObject had the following child:
10:15:52.594: I/flutter : RenderConstrainedBox NEEDS-LAYOUT
10:15:52.596: I/flutter : ════════════════════════════════════════════════════════════════════════════════════════════════════
10:15:52.598: I/flutter : Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1867 pos 12: '!_needsLayout' is not true.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
frameworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.waiting for PR to land (fixed)A fix is in flightA fix is in flight
Activity
Hixie commentedon Sep 12, 2016
Ok I need to instead have that give a polite assertion explaining the problem.
Hixie commentedon Sep 22, 2016
Wow, that assertion shouldn't be hit. We must not be catching the bogus setState earlier.
Hixie commentedon Sep 23, 2016
#6024 makes this much better
Hixie commentedon Oct 13, 2016
It now says:
Roll engine to 95e91e3
Roll engine to 95e91e3 (#19716)
github-actions commentedon Aug 15, 2021
This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of
flutter doctor -vand a minimal reproduction of the issue.