Revert "change TextEditingController.clear() behavior (#68775)" (#68920)
This reverts commit 95909c2a04ef62cc72aab61ac26157b8a8ad7a20.
diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart
index c52b54a..fda9b9d 100644
--- a/packages/flutter/lib/src/widgets/editable_text.dart
+++ b/packages/flutter/lib/src/widgets/editable_text.dart
@@ -230,14 +230,14 @@
/// Set the [value] to empty.
///
/// After calling this function, [text] will be the empty string and the
- /// selection will be collapsed at zero offset.
+ /// selection will be invalid.
///
/// Calling this will notify all the listeners of this [TextEditingController]
/// that they need to update (it calls [notifyListeners]). For this reason,
/// this method should only be called between frames, e.g. in response to user
/// actions, not during the build, layout, or paint phases.
void clear() {
- value = const TextEditingValue(selection: TextSelection.collapsed(offset: 0));
+ value = TextEditingValue.empty;
}
/// Set the composing region to an empty range.
diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart
index f7ed48f..9c7b2f1 100644
--- a/packages/flutter/test/widgets/editable_text_test.dart
+++ b/packages/flutter/test/widgets/editable_text_test.dart
@@ -5391,79 +5391,6 @@
expect(focusNode.hasFocus, false);
});
- testWidgets('TextEditingController.clear() behavior test', (WidgetTester tester) async {
- // Regression test for https://github.com/flutter/flutter/issues/66316
- final List<MethodCall> log = <MethodCall>[];
- SystemChannels.textInput.setMockMethodCallHandler((MethodCall methodCall) async {
- log.add(methodCall);
- });
- final TextEditingController controller = TextEditingController();
-
- final FocusNode focusNode = FocusNode(debugLabel: 'EditableText Focus Node');
- Widget builder() {
- return StatefulBuilder(
- builder: (BuildContext context, StateSetter setter) {
- return MaterialApp(
- home: MediaQuery(
- data: const MediaQueryData(devicePixelRatio: 1.0),
- child: Directionality(
- textDirection: TextDirection.ltr,
- child: Center(
- child: Material(
- child: EditableText(
- controller: controller,
- focusNode: focusNode,
- style: textStyle,
- cursorColor: Colors.red,
- backgroundCursorColor: Colors.red,
- keyboardType: TextInputType.multiline,
- onChanged: (String value) { },
- ),
- ),
- ),
- ),
- ),
- );
- },
- );
- }
-
- await tester.pumpWidget(builder());
- await tester.tap(find.byType(EditableText));
- await tester.pump();
-
- // The keyboard is shown after tap the EditableText.
- expect(focusNode.hasFocus, true);
-
- log.clear();
-
- final EditableTextState state = tester.firstState(find.byType(EditableText));
-
- state.updateEditingValue(const TextEditingValue(
- text: 'a',
- ));
- await tester.pump();
-
- // Nothing called when only the remote changes.
- expect(log.length, 0);
-
- controller.clear();
-
- expect(log.length, 1);
- expect(
- log[0],
- isMethodCall('TextInput.setEditingState', arguments: <String, dynamic>{
- 'text': '',
- 'selectionBase': 0,
- 'selectionExtent': 0,
- 'selectionAffinity': 'TextAffinity.downstream',
- 'selectionIsDirectional': false,
- 'composingBase': -1,
- 'composingExtent': -1,
- }),
- );
- });
-
testWidgets('autofocus:true on first frame does not throw', (WidgetTester tester) async {
final TextEditingController controller = TextEditingController(text: testText);
controller.selection = const TextSelection(