From a21b2be8bba87586b8d4f775ce4a0ff1ac239eaa Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 13 Jan 2021 11:54:02 -0800 Subject: [PATCH] [web] Fix layout exception when text is null (flutter/engine#23653) --- .../lib/web_ui/lib/src/engine/text/layout_service.dart | 4 ++++ .../web_ui/test/text/layout_service_plain_test.dart | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/text/layout_service.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/text/layout_service.dart index edd1938a5be..b5a57755bd1 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/text/layout_service.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/text/layout_service.dart @@ -71,6 +71,10 @@ class TextLayoutService { didExceedMaxLines = false; lines.clear(); + if (spanCount == 0) { + return; + } + final Spanometer spanometer = Spanometer(paragraph, context); int spanIndex = 0; diff --git a/engine/src/flutter/lib/web_ui/test/text/layout_service_plain_test.dart b/engine/src/flutter/lib/web_ui/test/text/layout_service_plain_test.dart index 4187ee3a7bb..811faf01139 100644 --- a/engine/src/flutter/lib/web_ui/test/text/layout_service_plain_test.dart +++ b/engine/src/flutter/lib/web_ui/test/text/layout_service_plain_test.dart @@ -42,6 +42,16 @@ void main() { void testMain() async { await ui.webOnlyInitializeTestDomRenderer(); + test('no text', () { + final CanvasParagraph paragraph = CanvasParagraphBuilder(ahemStyle).build(); + paragraph.layout(constrain(double.infinity)); + + expect(paragraph.maxIntrinsicWidth, 0); + expect(paragraph.minIntrinsicWidth, 0); + expect(paragraph.height, 0); + expect(paragraph.computeLineMetrics(), isEmpty); + }); + test('preserves whitespace when measuring', () { CanvasParagraph paragraph;