fixes iphone force press keybaord select crashes (#36698)
This commit is contained in:
parent
542fbd4c71
commit
1cb6b8bb0d
@ -1145,8 +1145,11 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FloatingCursorDragState.End:
|
case FloatingCursorDragState.End:
|
||||||
|
// We skip animation if no update has happened.
|
||||||
|
if (_lastTextPosition != null && _lastBoundedOffset != null) {
|
||||||
_floatingCursorResetController.value = 0.0;
|
_floatingCursorResetController.value = 0.0;
|
||||||
_floatingCursorResetController.animateTo(1.0, duration: _floatingCursorResetTime, curve: Curves.decelerate);
|
_floatingCursorResetController.animateTo(1.0, duration: _floatingCursorResetTime, curve: Curves.decelerate);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -509,6 +509,50 @@ void main() {
|
|||||||
expect(controller.selection.baseOffset, 10);
|
expect(controller.selection.baseOffset, 10);
|
||||||
}, skip: isBrowser);
|
}, skip: isBrowser);
|
||||||
|
|
||||||
|
testWidgets('Updating the floating cursor can end without update', (WidgetTester tester) async {
|
||||||
|
const String text = 'hello world this is fun and cool and awesome!';
|
||||||
|
controller.text = text;
|
||||||
|
final FocusNode focusNode = FocusNode();
|
||||||
|
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MediaQuery(
|
||||||
|
data: const MediaQueryData(devicePixelRatio: 1),
|
||||||
|
child: Directionality(
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
child: FocusScope(
|
||||||
|
node: focusScopeNode,
|
||||||
|
autofocus: true,
|
||||||
|
child: EditableText(
|
||||||
|
backgroundCursorColor: Colors.grey,
|
||||||
|
controller: controller,
|
||||||
|
focusNode: focusNode,
|
||||||
|
style: textStyle,
|
||||||
|
cursorColor: cursorColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
await tester.tap(find.byType(EditableText));
|
||||||
|
final RenderEditable renderEditable = findRenderEditable(tester);
|
||||||
|
renderEditable.selection = const TextSelection(baseOffset: 29, extentOffset: 29);
|
||||||
|
|
||||||
|
expect(controller.selection.baseOffset, 29);
|
||||||
|
|
||||||
|
final EditableTextState editableTextState = tester.firstState(find.byType(EditableText));
|
||||||
|
editableTextState.updateFloatingCursor(RawFloatingCursorPoint(state: FloatingCursorDragState.Start));
|
||||||
|
|
||||||
|
expect(controller.selection.baseOffset, 29);
|
||||||
|
|
||||||
|
editableTextState.updateFloatingCursor(RawFloatingCursorPoint(state: FloatingCursorDragState.End));
|
||||||
|
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
// The cursor did not change.
|
||||||
|
expect(controller.selection.baseOffset, 29);
|
||||||
|
expect(tester.takeException(), null);
|
||||||
|
}, skip: isBrowser);
|
||||||
|
|
||||||
// Regression test for https://github.com/flutter/flutter/pull/30475.
|
// Regression test for https://github.com/flutter/flutter/pull/30475.
|
||||||
testWidgets('Trying to select with the floating cursor does not crash', (WidgetTester tester) async {
|
testWidgets('Trying to select with the floating cursor does not crash', (WidgetTester tester) async {
|
||||||
const String text = 'hello world this is fun and cool and awesome!';
|
const String text = 'hello world this is fun and cool and awesome!';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user