From e2a0d03b7908abe4a28d87ccb2db0fa746a40efb Mon Sep 17 00:00:00 2001 From: Todd Volkert Date: Thu, 17 Dec 2020 19:25:28 -0800 Subject: [PATCH] Avoid null check operator failure in RenderFlex._hasOverflow (#72122) Fixes https://github.com/flutter/flutter/issues/71972 --- packages/flutter/lib/src/rendering/flex.dart | 10 +++++----- packages/flutter/test/rendering/flex_test.dart | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/flutter/lib/src/rendering/flex.dart b/packages/flutter/lib/src/rendering/flex.dart index 585839c3c2..b26421a367 100644 --- a/packages/flutter/lib/src/rendering/flex.dart +++ b/packages/flutter/lib/src/rendering/flex.dart @@ -483,10 +483,10 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin _overflow! > precisionErrorTolerance; + bool get _hasOverflow => _overflow > precisionErrorTolerance; /// {@macro flutter.material.Material.clipBehavior} /// @@ -1125,10 +1125,10 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin flex.getMaxIntrinsicWidth(100), cannotCalculateIntrinsics); expect(() => flex.getMinIntrinsicWidth(100), cannotCalculateIntrinsics); }); + + test('Can call methods that check overflow even if overflow value is not set', () { + final List exceptions = []; + final RenderFlex flex = RenderFlex(children: const []); + // This forces a check for _hasOverflow + expect(flex.toStringShort(), isNot(contains('OVERFLOWING'))); + layout(flex, phase: EnginePhase.paint, onErrors: () { + exceptions.addAll(renderer.takeAllFlutterExceptions()); + }); + // We expect the RenderFlex to throw during performLayout() for not having + // a text direction, thus leaving it with a null overflow value. It'll then + // try to paint(), which also checks _hasOverflow, and it should be able to + // do so without an ancillary error. + expect(exceptions, hasLength(1)); + expect(exceptions.first.message, isNot(contains('Null check operator'))); + }); }