Remove unused semantics tap action for readonly textfield and selectable text (#74066)

This commit is contained in:
chunhtai 2021-01-15 12:54:03 -08:00 committed by GitHub
parent 1b310472c0
commit 6a4808b4ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 20 deletions

View file

@ -1186,7 +1186,7 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
return Semantics(
enabled: enabled,
onTap: !enabled ? null : () {
onTap: !enabled || widget.readOnly ? null : () {
if (!controller.selection.isValid) {
controller.selection = TextSelection.collapsed(offset: controller.text.length);
}

View file

@ -652,11 +652,6 @@ class _SelectableTextState extends State<SelectableText> with AutomaticKeepAlive
);
return Semantics(
onTap: () {
if (!_controller.selection.isValid)
_controller.selection = TextSelection.collapsed(offset: _controller.text.length);
_effectiveFocusNode.requestFocus();
},
onLongPress: () {
_effectiveFocusNode.requestFocus();
},

View file

@ -1282,7 +1282,7 @@ class _TextFieldState extends State<TextField> with RestorationMixin implements
return Semantics(
maxValueLength: semanticsMaxValueLength,
currentValueLength: _currentLength,
onTap: () {
onTap: widget.readOnly ? null : () {
if (!_effectiveController.selection.isValid)
_effectiveController.selection = TextSelection.collapsed(offset: _effectiveController.text.length);
_requestKeyboard();

View file

@ -13,6 +13,7 @@ import 'package:flutter/gestures.dart' show DragStartBehavior, PointerDeviceKind
import 'package:flutter_test/flutter_test.dart';
import '../rendering/mock_canvas.dart';
import '../widgets/semantics_tester.dart';
class MockClipboard {
Object _clipboardData = <String, dynamic>{
@ -1589,6 +1590,25 @@ void main() {
},
);
testWidgets('Readonly text field does not have tap action', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
const CupertinoApp(
home: Center(
child: CupertinoTextField(
maxLength: 10,
readOnly: true,
),
),
),
);
expect(semantics, isNot(includesNodeWith(actions: <SemanticsAction>[SemanticsAction.tap])));
semantics.dispose();
});
testWidgets(
'double tap selects word and first tap of double tap moves cursor',
(WidgetTester tester) async {

View file

@ -3944,6 +3944,27 @@ void main() {
semantics.dispose();
});
testWidgets('Readonly text field does not have tap action', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
const MaterialApp(
home: Material(
child: Center(
child: TextField(
maxLength: 10,
readOnly: true,
),
),
),
),
);
expect(semantics, isNot(includesNodeWith(actions: <SemanticsAction>[SemanticsAction.tap])));
semantics.dispose();
});
testWidgets('Disabled text field hides helper and counter', (WidgetTester tester) async {
const String helperText = 'helper text';
const String counterText = 'counter text';

View file

@ -1937,7 +1937,6 @@ void main() {
textDirection: TextDirection.ltr,
value: 'Guten Tag',
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
],
flags: <SemanticsFlag>[
@ -1963,7 +1962,6 @@ void main() {
value: 'Guten Tag',
textSelection: const TextSelection.collapsed(offset: 9),
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorBackwardByWord,
@ -1990,7 +1988,6 @@ void main() {
textSelection: const TextSelection.collapsed(offset: 4),
value: 'Guten Tag',
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorForwardByCharacter,
@ -2019,7 +2016,6 @@ void main() {
textSelection: const TextSelection.collapsed(offset: 0),
value: 'Guten Tag',
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorForwardByCharacter,
SemanticsAction.moveCursorForwardByWord,
@ -2062,7 +2058,6 @@ void main() {
value: 'Guten Tag',
textDirection: TextDirection.ltr,
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
// Absent the following because enableInteractiveSelection: false
// SemanticsAction.moveCursorBackwardByCharacter,
@ -2108,7 +2103,6 @@ void main() {
value: 'Hello',
textDirection: TextDirection.ltr,
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
],
flags: <SemanticsFlag>[
@ -2135,7 +2129,6 @@ void main() {
textSelection: const TextSelection.collapsed(offset: 5),
textDirection: TextDirection.ltr,
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorBackwardByWord,
@ -2162,7 +2155,6 @@ void main() {
textSelection: const TextSelection(baseOffset: 5, extentOffset: 3),
textDirection: TextDirection.ltr,
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorForwardByCharacter,
@ -2218,7 +2210,6 @@ void main() {
textSelection: const TextSelection.collapsed(offset: 5),
textDirection: TextDirection.ltr,
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorBackwardByWord,
@ -2265,7 +2256,6 @@ void main() {
textSelection: const TextSelection(baseOffset: 0, extentOffset: 5),
textDirection: TextDirection.ltr,
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorBackwardByWord,
@ -2315,7 +2305,7 @@ void main() {
SemanticsFlag.isTextField,
SemanticsFlag.isMultiline,
],
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.longPress],
actions: <SemanticsAction>[SemanticsAction.longPress],
value: testValue,
textDirection: TextDirection.ltr,
),
@ -2324,7 +2314,7 @@ void main() {
ignoreRect: true, ignoreTransform: true,
));
semanticsOwner.performAction(inputFieldId, SemanticsAction.tap);
semanticsOwner.performAction(inputFieldId, SemanticsAction.longPress);
await tester.pump();
expect(semantics, hasSemantics(
@ -2339,7 +2329,6 @@ void main() {
SemanticsFlag.isFocused,
],
actions: <SemanticsAction>[
SemanticsAction.tap,
SemanticsAction.longPress,
SemanticsAction.moveCursorBackwardByCharacter,
SemanticsAction.moveCursorBackwardByWord,