Commit c61e55ad authored by Justin McCandless's avatar Justin McCandless Committed by Flutter GitHub Bot

Selection menu not showing when selection is 0,0 (#49000)

parent f013b25b
...@@ -409,8 +409,14 @@ class RenderEditable extends RenderBox with RelayoutWhenSystemFontsChangeMixin { ...@@ -409,8 +409,14 @@ class RenderEditable extends RenderBox with RelayoutWhenSystemFontsChangeMixin {
) { ) {
// Changes made by the keyboard can sometimes be "out of band" for listening // Changes made by the keyboard can sometimes be "out of band" for listening
// components, so always send those events, even if we didn't think it // components, so always send those events, even if we didn't think it
// changed. // changed. Also, focusing an empty field is sent as a selection change even
if (nextSelection == selection && cause != SelectionChangedCause.keyboard) { // if the selection offset didn't change.
final bool focusingEmpty = nextSelection.baseOffset == 0
&& nextSelection.extentOffset == 0
&& !hasFocus;
if (nextSelection == selection
&& cause != SelectionChangedCause.keyboard
&& !focusingEmpty) {
return; return;
} }
if (onSelectionChanged != null) { if (onSelectionChanged != null) {
......
...@@ -857,6 +857,27 @@ void main() { ...@@ -857,6 +857,27 @@ void main() {
expect(handle.opacity.value, equals(1.0)); expect(handle.opacity.value, equals(1.0));
}); });
testWidgets('Long pressing a field with selection 0,0 shows the selection menu', (WidgetTester tester) async {
await tester.pumpWidget(overlay(
child: TextField(
controller: TextEditingController.fromValue(
const TextEditingValue(
selection: TextSelection(baseOffset: 0, extentOffset: 0),
),
),
),
));
expect(find.text('PASTE'), findsNothing);
final Offset emptyPos = textOffsetToPosition(tester, 0);
await tester.longPressAt(emptyPos, pointer: 7);
await tester.pumpAndSettle();
expect(find.text('PASTE'), findsOneWidget);
});
testWidgets('Entering text hides selection handle caret', (WidgetTester tester) async { testWidgets('Entering text hides selection handle caret', (WidgetTester tester) async {
final TextEditingController controller = TextEditingController(); final TextEditingController controller = TextEditingController();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment