From d1f02ae075ec5130fcc028420067665be77fdb60 Mon Sep 17 00:00:00 2001 From: Ian Hickson Date: Tue, 27 Apr 2021 15:04:03 -0700 Subject: [PATCH] Short-circuit _debugCanPerformMutations if debugDoingLayout is false (#81246) --- packages/flutter/lib/src/rendering/object.dart | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index 92eae37419..a149c17e99 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -1359,11 +1359,18 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im /// Whether tree mutations are currently permitted. /// - /// Only valid when asserts are enabled. In release builds, always returns - /// null. + /// This is only useful during layout. One should also not mutate the tree at + /// other times (e.g. during paint or while assembling the semantic tree) but + /// this function does not currently enforce those conventions. + /// + /// Only valid when asserts are enabled. This will throw in release builds. bool get _debugCanPerformMutations { late bool result; assert(() { + if (owner != null && !owner!.debugDoingLayout) { + result = true; + return true; + } RenderObject node = this; while (true) { if (node._doingThisLayoutWithCallback) {