From 1daae0b0ae0e819019100415e53e574e5d154dbd Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Mon, 25 Oct 2021 16:23:03 -0700 Subject: [PATCH] Remove assert that prevents WidgetSpans from being used in SelectableText (#92295) --- packages/flutter/lib/src/material/selectable_text.dart | 8 +++++--- packages/flutter/test/widgets/selectable_text_test.dart | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/flutter/lib/src/material/selectable_text.dart b/packages/flutter/lib/src/material/selectable_text.dart index 292edf1a43..6178ed5556 100644 --- a/packages/flutter/lib/src/material/selectable_text.dart +++ b/packages/flutter/lib/src/material/selectable_text.dart @@ -585,9 +585,11 @@ class _SelectableTextState extends State with AutomaticKeepAlive @override Widget build(BuildContext context) { super.build(context); // See AutomaticKeepAliveClientMixin. - assert(() { - return _controller._textSpan.visitChildren((InlineSpan span) => span.runtimeType == TextSpan); - }(), 'SelectableText only supports TextSpan; Other type of InlineSpan is not allowed'); + // TODO(garyq): Assert to block WidgetSpans from being used here are removed, + // but we still do not yet have nice handling of things like carets, clipboard, + // and other features. We should add proper support. Currently, caret handling + // is blocked on SkParagraph switch and https://github.com/flutter/engine/pull/27010 + // should be landed in SkParagraph after the switch is complete. assert(debugCheckHasMediaQuery(context)); assert(debugCheckHasDirectionality(context)); assert( diff --git a/packages/flutter/test/widgets/selectable_text_test.dart b/packages/flutter/test/widgets/selectable_text_test.dart index 92400bc21c..99c47908e7 100644 --- a/packages/flutter/test/widgets/selectable_text_test.dart +++ b/packages/flutter/test/widgets/selectable_text_test.dart @@ -319,7 +319,7 @@ void main() { expect(selectableText.enableInteractiveSelection, true); }); - testWidgets('Rich selectable text only support TextSpan', (WidgetTester tester) async { + testWidgets('Rich selectable text supports WidgetSpan', (WidgetTester tester) async { await tester.pumpWidget( const MediaQuery( data: MediaQueryData(), @@ -357,7 +357,7 @@ void main() { ), ), ); - expect(tester.takeException(), isAssertionError); + expect(tester.takeException(), isNull); }); testWidgets('no text keyboard when widget is focused', (WidgetTester tester) async {