Commit a7a95daa authored by Chris Bracken's avatar Chris Bracken Committed by GitHub

Update TextEditingValue.selection on selection change (#9284)

Fixes a bug where tapping in the text under edit moved the cursor but
did not push the updated selection to the engine.

Adds a test for caret position updates.
parent 5b89c101
......@@ -381,12 +381,13 @@ class EditableTextState extends State<EditableText> implements TextInputClient {
}
void _handleSelectionChanged(TextSelection selection, RenderEditable renderObject, bool longPress) {
config.controller.selection = selection;
// Note that this will show the keyboard for all selection changes on the
// EditableWidget, not just changes triggered by user gestures.
requestKeyboard();
_hideSelectionOverlayIfNeeded();
config.controller.selection = selection;
if (config.selectionControls != null) {
_selectionOverlay = new TextSelectionOverlay(
......
......@@ -191,6 +191,39 @@ void main() {
await tester.pump();
});
testWidgets('Caret position is updated on tap', (WidgetTester tester) async {
final TextEditingController controller = new TextEditingController();
Widget builder() {
return overlay(new Center(
child: new Material(
child: new TextField(
controller: controller,
),
),
));
}
await tester.pumpWidget(builder());
expect(controller.selection.baseOffset, -1);
expect(controller.selection.extentOffset, -1);
final String testValue = 'abc def ghi';
await tester.enterText(find.byType(EditableText), testValue);
await tester.idle();
await tester.pumpWidget(builder());
// Tap to reposition the caret.
final int tapIndex = testValue.indexOf('e');
final Point ePos = textOffsetToPosition(tester, tapIndex);
await tester.tapAt(ePos);
await tester.pump();
expect(controller.selection.baseOffset, tapIndex);
expect(controller.selection.extentOffset, tapIndex);
});
testWidgets('Can long press to select', (WidgetTester tester) async {
final TextEditingController controller = new 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