From 1fe24956ac46b7805cf9de1b9f4e7dfc74e99dec Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Wed, 30 Aug 2023 15:25:35 +0200 Subject: [PATCH] Update SelectableRegion test for M3 (#129627) ## Description This PR fixes one selectable region test failure when switching to M3. The failure is somewhat tricky because it is related to the M3 typography (line height set to 1.43). ## Related Issue fixes https://github.com/flutter/flutter/issues/129626 ## Tests Updates 1 test. --- packages/flutter/lib/src/widgets/selectable_region.dart | 6 +++--- packages/flutter/test/widgets/selectable_region_test.dart | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/flutter/lib/src/widgets/selectable_region.dart b/packages/flutter/lib/src/widgets/selectable_region.dart index f08e20ec255..17abff5de57 100644 --- a/packages/flutter/lib/src/widgets/selectable_region.dart +++ b/packages/flutter/lib/src/widgets/selectable_region.dart @@ -2052,15 +2052,15 @@ abstract class MultiSelectableSelectionContainerDelegate extends SelectionContai if (globalRect.contains(event.globalPosition)) { final SelectionGeometry existingGeometry = selectables[index].value; lastSelectionResult = dispatchSelectionEventToChild(selectables[index], event); + if (index == selectables.length - 1 && lastSelectionResult == SelectionResult.next) { + return SelectionResult.next; + } if (lastSelectionResult == SelectionResult.next) { continue; } if (index == 0 && lastSelectionResult == SelectionResult.previous) { return SelectionResult.previous; } - if (index == selectables.length - 1 && lastSelectionResult == SelectionResult.next) { - return SelectionResult.next; - } if (selectables[index].value != existingGeometry) { // Geometry has changed as a result of select word, need to clear the // selection of other selectables to keep selection in sync. diff --git a/packages/flutter/test/widgets/selectable_region_test.dart b/packages/flutter/test/widgets/selectable_region_test.dart index a2e8bcb67fa..b4e3f5d0eeb 100644 --- a/packages/flutter/test/widgets/selectable_region_test.dart +++ b/packages/flutter/test/widgets/selectable_region_test.dart @@ -1570,7 +1570,6 @@ void main() { final UniqueKey outerText = UniqueKey(); await tester.pumpWidget( MaterialApp( - theme: ThemeData(useMaterial3: false), home: SelectableRegion( focusNode: FocusNode(), selectionControls: materialTextSelectionControls, @@ -1595,8 +1594,13 @@ void main() { ), ); final RenderParagraph paragraph = tester.renderObject(find.descendant(of: find.byKey(outerText), matching: find.byType(RichText)).first); + + // Adjust `textOffsetToPosition` result because it returns the wrong vertical position (wrong line). + // TODO(bleroux): Remove when https://github.com/flutter/flutter/issues/133637 is fixed. + final Offset gestureOffset = textOffsetToPosition(paragraph, 125).translate(0, 10); + // Right click to select word at position. - final TestGesture gesture = await tester.startGesture(textOffsetToPosition(paragraph, 125), kind: PointerDeviceKind.mouse, buttons: kSecondaryMouseButton); + final TestGesture gesture = await tester.startGesture(gestureOffset, kind: PointerDeviceKind.mouse, buttons: kSecondaryMouseButton); addTearDown(gesture.removePointer); await tester.pump(); await gesture.up();