Unverified Commit b4324aed authored by Michael Goderbauer's avatar Michael Goderbauer Committed by GitHub

Revert "Propagate textfield character limits to semantics (#40468)" (#40714)

This reverts commit 6ad88bd5.
parent 6ad88bd5
...@@ -688,8 +688,6 @@ class _TextFieldState extends State<TextField> with AutomaticKeepAliveClientMixi ...@@ -688,8 +688,6 @@ class _TextFieldState extends State<TextField> with AutomaticKeepAliveClientMixi
bool get _isEnabled => widget.enabled ?? widget.decoration?.enabled ?? true; bool get _isEnabled => widget.enabled ?? widget.decoration?.enabled ?? true;
int get _currentLength => _effectiveController.value.text.runes.length;
InputDecoration _getEffectiveDecoration() { InputDecoration _getEffectiveDecoration() {
final MaterialLocalizations localizations = MaterialLocalizations.of(context); final MaterialLocalizations localizations = MaterialLocalizations.of(context);
final ThemeData themeData = Theme.of(context); final ThemeData themeData = Theme.of(context);
...@@ -706,7 +704,7 @@ class _TextFieldState extends State<TextField> with AutomaticKeepAliveClientMixi ...@@ -706,7 +704,7 @@ class _TextFieldState extends State<TextField> with AutomaticKeepAliveClientMixi
// If buildCounter was provided, use it to generate a counter widget. // If buildCounter was provided, use it to generate a counter widget.
Widget counter; Widget counter;
final int currentLength = _currentLength; final int currentLength = _effectiveController.value.text.runes.length;
if (effectiveDecoration.counter == null if (effectiveDecoration.counter == null
&& effectiveDecoration.counterText == null && effectiveDecoration.counterText == null
&& widget.buildCounter != null) { && widget.buildCounter != null) {
...@@ -1036,27 +1034,18 @@ class _TextFieldState extends State<TextField> with AutomaticKeepAliveClientMixi ...@@ -1036,27 +1034,18 @@ class _TextFieldState extends State<TextField> with AutomaticKeepAliveClientMixi
child: child, child: child,
); );
} }
return IgnorePointer(
ignoring: !_isEnabled, return Semantics(
onTap: () {
if (!_effectiveController.selection.isValid)
_effectiveController.selection = TextSelection.collapsed(offset: _effectiveController.text.length);
_requestKeyboard();
},
child: MouseRegion( child: MouseRegion(
onEnter: _handleMouseEnter, onEnter: _handleMouseEnter,
onExit: _handleMouseExit, onExit: _handleMouseExit,
child: AnimatedBuilder( child: IgnorePointer(
animation: controller, // changes the _currentLength ignoring: !_isEnabled,
builder: (BuildContext context, Widget child) {
return Semantics(
maxValueLength: widget.maxLengthEnforced && widget.maxLength != null && widget.maxLength > 0
? widget.maxLength
: null,
currentValueLength: _currentLength,
onTap: () {
if (!_effectiveController.selection.isValid)
_effectiveController.selection = TextSelection.collapsed(offset: _effectiveController.text.length);
_requestKeyboard();
},
child: child,
);
},
child: _selectionGestureDetectorBuilder.buildGestureDetector( child: _selectionGestureDetectorBuilder.buildGestureDetector(
behavior: HitTestBehavior.translucent, behavior: HitTestBehavior.translucent,
child: child, child: child,
......
...@@ -864,12 +864,6 @@ class RenderCustomPaint extends RenderProxyBox { ...@@ -864,12 +864,6 @@ class RenderCustomPaint extends RenderProxyBox {
if (properties.liveRegion != null) { if (properties.liveRegion != null) {
config.liveRegion = properties.liveRegion; config.liveRegion = properties.liveRegion;
} }
if (properties.maxValueLength != null) {
config.maxValueLength = properties.maxValueLength;
}
if (properties.currentValueLength != null) {
config.currentValueLength = properties.currentValueLength;
}
if (properties.toggled != null) { if (properties.toggled != null) {
config.isToggled = properties.toggled; config.isToggled = properties.toggled;
} }
......
...@@ -3497,8 +3497,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox { ...@@ -3497,8 +3497,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox {
bool hidden, bool hidden,
bool image, bool image,
bool liveRegion, bool liveRegion,
int maxValueLength,
int currentValueLength,
String label, String label,
String value, String value,
String increasedValue, String increasedValue,
...@@ -3546,8 +3544,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox { ...@@ -3546,8 +3544,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox {
_scopesRoute = scopesRoute, _scopesRoute = scopesRoute,
_namesRoute = namesRoute, _namesRoute = namesRoute,
_liveRegion = liveRegion, _liveRegion = liveRegion,
_maxValueLength = maxValueLength,
_currentValueLength = currentValueLength,
_hidden = hidden, _hidden = hidden,
_image = image, _image = image,
_onDismiss = onDismiss, _onDismiss = onDismiss,
...@@ -3803,28 +3799,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox { ...@@ -3803,28 +3799,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox {
markNeedsSemanticsUpdate(); markNeedsSemanticsUpdate();
} }
/// If non-null, sets the [SemanticsNode.maxValueLength] semantic to the given
/// value.
int get maxValueLength => _maxValueLength;
int _maxValueLength;
set maxValueLength(int value) {
if (_maxValueLength == value)
return;
_maxValueLength = value;
markNeedsSemanticsUpdate();
}
/// If non-null, sets the [SemanticsNode.currentValueLength] semantic to the
/// given value.
int get currentValueLength => _currentValueLength;
int _currentValueLength;
set currentValueLength(int value) {
if (_currentValueLength == value)
return;
_currentValueLength = value;
markNeedsSemanticsUpdate();
}
/// If non-null, sets the [SemanticsNode.isToggled] semantic to the given /// If non-null, sets the [SemanticsNode.isToggled] semantic to the given
/// value. /// value.
bool get toggled => _toggled; bool get toggled => _toggled;
...@@ -4396,12 +4370,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox { ...@@ -4396,12 +4370,6 @@ class RenderSemanticsAnnotations extends RenderProxyBox {
config.namesRoute = namesRoute; config.namesRoute = namesRoute;
if (liveRegion != null) if (liveRegion != null)
config.liveRegion = liveRegion; config.liveRegion = liveRegion;
if (maxValueLength != null) {
config.maxValueLength = maxValueLength;
}
if (currentValueLength != null) {
config.currentValueLength = currentValueLength;
}
if (textDirection != null) if (textDirection != null)
config.textDirection = textDirection; config.textDirection = textDirection;
if (sortKey != null) if (sortKey != null)
......
...@@ -6196,8 +6196,6 @@ class Semantics extends SingleChildRenderObjectWidget { ...@@ -6196,8 +6196,6 @@ class Semantics extends SingleChildRenderObjectWidget {
bool hidden, bool hidden,
bool image, bool image,
bool liveRegion, bool liveRegion,
int maxValueLength,
int currentValueLength,
String label, String label,
String value, String value,
String increasedValue, String increasedValue,
...@@ -6249,8 +6247,6 @@ class Semantics extends SingleChildRenderObjectWidget { ...@@ -6249,8 +6247,6 @@ class Semantics extends SingleChildRenderObjectWidget {
hidden: hidden, hidden: hidden,
image: image, image: image,
liveRegion: liveRegion, liveRegion: liveRegion,
maxValueLength: maxValueLength,
currentValueLength: currentValueLength,
label: label, label: label,
value: value, value: value,
increasedValue: increasedValue, increasedValue: increasedValue,
...@@ -6354,8 +6350,6 @@ class Semantics extends SingleChildRenderObjectWidget { ...@@ -6354,8 +6350,6 @@ class Semantics extends SingleChildRenderObjectWidget {
readOnly: properties.readOnly, readOnly: properties.readOnly,
focused: properties.focused, focused: properties.focused,
liveRegion: properties.liveRegion, liveRegion: properties.liveRegion,
maxValueLength: properties.maxValueLength,
currentValueLength: properties.currentValueLength,
inMutuallyExclusiveGroup: properties.inMutuallyExclusiveGroup, inMutuallyExclusiveGroup: properties.inMutuallyExclusiveGroup,
obscured: properties.obscured, obscured: properties.obscured,
multiline: properties.multiline, multiline: properties.multiline,
...@@ -6428,8 +6422,6 @@ class Semantics extends SingleChildRenderObjectWidget { ...@@ -6428,8 +6422,6 @@ class Semantics extends SingleChildRenderObjectWidget {
..hidden = properties.hidden ..hidden = properties.hidden
..image = properties.image ..image = properties.image
..liveRegion = properties.liveRegion ..liveRegion = properties.liveRegion
..maxValueLength = properties.maxValueLength
..currentValueLength = properties.currentValueLength
..label = properties.label ..label = properties.label
..value = properties.value ..value = properties.value
..increasedValue = properties.increasedValue ..increasedValue = properties.increasedValue
......
...@@ -3367,68 +3367,6 @@ void main() { ...@@ -3367,68 +3367,6 @@ void main() {
semantics.dispose(); semantics.dispose();
}); });
testWidgets('Disabled 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,
enabled: false,
),
),
),
),
);
expect(semantics, isNot(includesNodeWith(actions: <SemanticsAction>[SemanticsAction.tap])));
semantics.dispose();
});
testWidgets('currentValueLength/maxValueLength are in the tree', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
final TextEditingController controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
home: Material(
child: Center(
child: TextField(
controller: controller,
maxLength: 10,
),
),
),
),
);
expect(semantics, includesNodeWith(
flags: <SemanticsFlag>[SemanticsFlag.isTextField],
maxValueLength: 10,
currentValueLength: 0,
));
await tester.showKeyboard(find.byType(TextField));
const String testValue = '123';
tester.testTextInput.updateEditingValue(const TextEditingValue(
text: testValue,
selection: TextSelection.collapsed(offset: 3),
composing: TextRange(start: 0, end: testValue.length),
));
await tester.pump();
expect(semantics, includesNodeWith(
flags: <SemanticsFlag>[SemanticsFlag.isTextField, SemanticsFlag.isFocused],
maxValueLength: 10,
currentValueLength: 3,
));
semantics.dispose();
});
testWidgets('Read only TextField identifies as read only text field in semantics', (WidgetTester tester) async { testWidgets('Read only TextField identifies as read only text field in semantics', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester); final SemanticsTester semantics = SemanticsTester(tester);
......
...@@ -447,8 +447,6 @@ void main() { ...@@ -447,8 +447,6 @@ void main() {
' textDirection: null\n' ' textDirection: null\n'
' sortKey: null\n' ' sortKey: null\n'
' platformViewId: null\n' ' platformViewId: null\n'
' maxValueLength: null\n'
' currentValueLength: null\n'
' scrollChildren: null\n' ' scrollChildren: null\n'
' scrollIndex: null\n' ' scrollIndex: null\n'
' scrollExtentMin: null\n' ' scrollExtentMin: null\n'
...@@ -545,8 +543,6 @@ void main() { ...@@ -545,8 +543,6 @@ void main() {
' textDirection: null\n' ' textDirection: null\n'
' sortKey: null\n' ' sortKey: null\n'
' platformViewId: null\n' ' platformViewId: null\n'
' maxValueLength: null\n'
' currentValueLength: null\n'
' scrollChildren: null\n' ' scrollChildren: null\n'
' scrollIndex: null\n' ' scrollIndex: null\n'
' scrollExtentMin: null\n' ' scrollExtentMin: null\n'
......
...@@ -452,11 +452,8 @@ void main() { ...@@ -452,11 +452,8 @@ void main() {
), ),
); );
final dynamic semanticsDebuggerPainter = _getSemanticsDebuggerPainter(debuggerKey: debugger, tester: tester);
final RenderObject renderTextfield = tester.renderObject(find.descendant(of: find.byKey(textField), matching: find.byType(Semantics)).first);
expect( expect(
semanticsDebuggerPainter.getMessage(renderTextfield.debugSemantics), _getMessageShownInSemanticsDebugger(widgetKey: textField, debuggerKey: debugger, tester: tester),
'textfield', 'textfield',
); );
}); });
...@@ -466,14 +463,6 @@ String _getMessageShownInSemanticsDebugger({ ...@@ -466,14 +463,6 @@ String _getMessageShownInSemanticsDebugger({
@required Key widgetKey, @required Key widgetKey,
@required Key debuggerKey, @required Key debuggerKey,
@required WidgetTester tester, @required WidgetTester tester,
}) {
final dynamic semanticsDebuggerPainter = _getSemanticsDebuggerPainter(debuggerKey: debuggerKey, tester: tester);
return semanticsDebuggerPainter.getMessage(tester.renderObject(find.byKey(widgetKey)).debugSemantics);
}
dynamic _getSemanticsDebuggerPainter({
@required Key debuggerKey,
@required WidgetTester tester,
}) { }) {
final CustomPaint customPaint = tester.widgetList(find.descendant( final CustomPaint customPaint = tester.widgetList(find.descendant(
of: find.byKey(debuggerKey), of: find.byKey(debuggerKey),
...@@ -481,5 +470,5 @@ dynamic _getSemanticsDebuggerPainter({ ...@@ -481,5 +470,5 @@ dynamic _getSemanticsDebuggerPainter({
)).first; )).first;
final dynamic semanticsDebuggerPainter = customPaint.foregroundPainter; final dynamic semanticsDebuggerPainter = customPaint.foregroundPainter;
expect(semanticsDebuggerPainter.runtimeType.toString(), '_SemanticsDebuggerPainter'); expect(semanticsDebuggerPainter.runtimeType.toString(), '_SemanticsDebuggerPainter');
return semanticsDebuggerPainter; return semanticsDebuggerPainter.getMessage(tester.renderObject(find.byKey(widgetKey)).debugSemantics);
} }
...@@ -442,8 +442,6 @@ class SemanticsTester { ...@@ -442,8 +442,6 @@ class SemanticsTester {
double scrollPosition, double scrollPosition,
double scrollExtentMax, double scrollExtentMax,
double scrollExtentMin, double scrollExtentMin,
int currentValueLength,
int maxValueLength,
SemanticsNode ancestor, SemanticsNode ancestor,
}) { }) {
bool checkNode(SemanticsNode node) { bool checkNode(SemanticsNode node) {
...@@ -473,12 +471,6 @@ class SemanticsTester { ...@@ -473,12 +471,6 @@ class SemanticsTester {
return false; return false;
if (scrollExtentMin != null && !nearEqual(node.scrollExtentMin, scrollExtentMin, 0.1)) if (scrollExtentMin != null && !nearEqual(node.scrollExtentMin, scrollExtentMin, 0.1))
return false; return false;
if (currentValueLength != null && node.currentValueLength != currentValueLength) {
return false;
}
if (maxValueLength != null && node.maxValueLength != maxValueLength) {
return false;
}
return true; return true;
} }
...@@ -721,19 +713,7 @@ class _IncludesNodeWith extends Matcher { ...@@ -721,19 +713,7 @@ class _IncludesNodeWith extends Matcher {
this.scrollPosition, this.scrollPosition,
this.scrollExtentMax, this.scrollExtentMax,
this.scrollExtentMin, this.scrollExtentMin,
this.maxValueLength, }) : assert(label != null || value != null || actions != null || flags != null || scrollPosition != null || scrollExtentMax != null || scrollExtentMin != null);
this.currentValueLength,
}) : assert(
label != null ||
value != null ||
actions != null ||
flags != null ||
scrollPosition != null ||
scrollExtentMax != null ||
scrollExtentMin != null ||
maxValueLength != null ||
currentValueLength != null
);
final String label; final String label;
final String value; final String value;
...@@ -744,8 +724,6 @@ class _IncludesNodeWith extends Matcher { ...@@ -744,8 +724,6 @@ class _IncludesNodeWith extends Matcher {
final double scrollPosition; final double scrollPosition;
final double scrollExtentMax; final double scrollExtentMax;
final double scrollExtentMin; final double scrollExtentMin;
final int currentValueLength;
final int maxValueLength;
@override @override
bool matches(covariant SemanticsTester item, Map<dynamic, dynamic> matchState) { bool matches(covariant SemanticsTester item, Map<dynamic, dynamic> matchState) {
...@@ -759,8 +737,6 @@ class _IncludesNodeWith extends Matcher { ...@@ -759,8 +737,6 @@ class _IncludesNodeWith extends Matcher {
scrollPosition: scrollPosition, scrollPosition: scrollPosition,
scrollExtentMax: scrollExtentMax, scrollExtentMax: scrollExtentMax,
scrollExtentMin: scrollExtentMin, scrollExtentMin: scrollExtentMin,
currentValueLength: currentValueLength,
maxValueLength: maxValueLength,
).isNotEmpty; ).isNotEmpty;
} }
...@@ -785,8 +761,6 @@ class _IncludesNodeWith extends Matcher { ...@@ -785,8 +761,6 @@ class _IncludesNodeWith extends Matcher {
if (scrollPosition != null) 'scrollPosition "$scrollPosition"', if (scrollPosition != null) 'scrollPosition "$scrollPosition"',
if (scrollExtentMax != null) 'scrollExtentMax "$scrollExtentMax"', if (scrollExtentMax != null) 'scrollExtentMax "$scrollExtentMax"',
if (scrollExtentMin != null) 'scrollExtentMin "$scrollExtentMin"', if (scrollExtentMin != null) 'scrollExtentMin "$scrollExtentMin"',
if (currentValueLength != null) 'currentValueLength "$currentValueLength"',
if (maxValueLength != null) 'maxValueLength "$maxValueLength"',
]; ];
return strings.join(', '); return strings.join(', ');
} }
...@@ -806,8 +780,6 @@ Matcher includesNodeWith({ ...@@ -806,8 +780,6 @@ Matcher includesNodeWith({
double scrollPosition, double scrollPosition,
double scrollExtentMax, double scrollExtentMax,
double scrollExtentMin, double scrollExtentMin,
int maxValueLength,
int currentValueLength,
}) { }) {
return _IncludesNodeWith( return _IncludesNodeWith(
label: label, label: label,
...@@ -819,7 +791,5 @@ Matcher includesNodeWith({ ...@@ -819,7 +791,5 @@ Matcher includesNodeWith({
scrollPosition: scrollPosition, scrollPosition: scrollPosition,
scrollExtentMax: scrollExtentMax, scrollExtentMax: scrollExtentMax,
scrollExtentMin: scrollExtentMin, scrollExtentMin: scrollExtentMin,
maxValueLength: maxValueLength,
currentValueLength: currentValueLength,
); );
} }
...@@ -433,8 +433,6 @@ Matcher matchesSemantics({ ...@@ -433,8 +433,6 @@ Matcher matchesSemantics({
double elevation, double elevation,
double thickness, double thickness,
int platformViewId, int platformViewId,
int maxValueLength,
int currentValueLength,
// Flags // // Flags //
bool hasCheckedState = false, bool hasCheckedState = false,
bool isChecked = false, bool isChecked = false,
...@@ -554,8 +552,6 @@ Matcher matchesSemantics({ ...@@ -554,8 +552,6 @@ Matcher matchesSemantics({
platformViewId: platformViewId, platformViewId: platformViewId,
customActions: customActions, customActions: customActions,
hintOverrides: hintOverrides, hintOverrides: hintOverrides,
currentValueLength: currentValueLength,
maxValueLength: maxValueLength,
children: children, children: children,
); );
} }
...@@ -1749,8 +1745,6 @@ class _MatchesSemanticsData extends Matcher { ...@@ -1749,8 +1745,6 @@ class _MatchesSemanticsData extends Matcher {
this.elevation, this.elevation,
this.thickness, this.thickness,
this.platformViewId, this.platformViewId,
this.maxValueLength,
this.currentValueLength,
this.customActions, this.customActions,
this.hintOverrides, this.hintOverrides,
this.children, this.children,
...@@ -1771,8 +1765,6 @@ class _MatchesSemanticsData extends Matcher { ...@@ -1771,8 +1765,6 @@ class _MatchesSemanticsData extends Matcher {
final double elevation; final double elevation;
final double thickness; final double thickness;
final int platformViewId; final int platformViewId;
final int maxValueLength;
final int currentValueLength;
final List<Matcher> children; final List<Matcher> children;
@override @override
...@@ -1804,10 +1796,6 @@ class _MatchesSemanticsData extends Matcher { ...@@ -1804,10 +1796,6 @@ class _MatchesSemanticsData extends Matcher {
description.add(' with thickness: $thickness'); description.add(' with thickness: $thickness');
if (platformViewId != null) if (platformViewId != null)
description.add(' with platformViewId: $platformViewId'); description.add(' with platformViewId: $platformViewId');
if (maxValueLength != null)
description.add(' with maxValueLength: $maxValueLength');
if (currentValueLength != null)
description.add(' with currentValueLength: $currentValueLength');
if (customActions != null) if (customActions != null)
description.add(' with custom actions: $customActions'); description.add(' with custom actions: $customActions');
if (hintOverrides != null) if (hintOverrides != null)
...@@ -1850,10 +1838,6 @@ class _MatchesSemanticsData extends Matcher { ...@@ -1850,10 +1838,6 @@ class _MatchesSemanticsData extends Matcher {
return failWithDescription(matchState, 'thickness was: ${data.thickness}'); return failWithDescription(matchState, 'thickness was: ${data.thickness}');
if (platformViewId != null && platformViewId != data.platformViewId) if (platformViewId != null && platformViewId != data.platformViewId)
return failWithDescription(matchState, 'platformViewId was: ${data.platformViewId}'); return failWithDescription(matchState, 'platformViewId was: ${data.platformViewId}');
if (currentValueLength != null && currentValueLength != data.currentValueLength)
return failWithDescription(matchState, 'currentValueLength was: ${data.currentValueLength}');
if (maxValueLength != null && maxValueLength != data.maxValueLength)
return failWithDescription(matchState, 'maxValueLength was: ${data.maxValueLength}');
if (actions != null) { if (actions != null) {
int actionBits = 0; int actionBits = 0;
for (SemanticsAction action in actions) for (SemanticsAction action in actions)
......
...@@ -525,8 +525,6 @@ void main() { ...@@ -525,8 +525,6 @@ void main() {
scrollExtentMin: null, scrollExtentMin: null,
platformViewId: 105, platformViewId: 105,
customSemanticsActionIds: <int>[CustomSemanticsAction.getIdentifier(action)], customSemanticsActionIds: <int>[CustomSemanticsAction.getIdentifier(action)],
currentValueLength: 10,
maxValueLength: 15,
); );
final _FakeSemanticsNode node = _FakeSemanticsNode(); final _FakeSemanticsNode node = _FakeSemanticsNode();
node.data = data; node.data = data;
...@@ -537,8 +535,6 @@ void main() { ...@@ -537,8 +535,6 @@ void main() {
elevation: 3.0, elevation: 3.0,
thickness: 4.0, thickness: 4.0,
platformViewId: 105, platformViewId: 105,
currentValueLength: 10,
maxValueLength: 15,
/* Flags */ /* Flags */
hasCheckedState: true, hasCheckedState: true,
isChecked: true, isChecked: true,
......
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