CupertinoTextField should not accept requestFocus when disabled (#65235)

This commit is contained in:
xubaolin 2020-10-13 05:07:05 +08:00 committed by GitHub
parent 408cd71d82
commit dd41f41f34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 5 deletions

View File

@ -653,6 +653,7 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
if (widget.controller == null) {
_createLocalController();
}
_effectiveFocusNode.canRequestFocus = widget.enabled ?? true;
}
@override
@ -665,11 +666,7 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
_controller!.dispose();
_controller = null;
}
final bool isEnabled = widget.enabled ?? true;
final bool wasEnabled = oldWidget.enabled ?? true;
if (wasEnabled && !isEnabled) {
_effectiveFocusNode.unfocus();
}
_effectiveFocusNode.canRequestFocus = widget.enabled ?? true;
}
@override

View File

@ -2707,6 +2707,43 @@ void main() {
expect(tapCount, 1);
});
testWidgets('Focus test when the text field is disabled', (WidgetTester tester) async {
final FocusNode focusNode = FocusNode();
await tester.pumpWidget(
CupertinoApp(
home: Center(
child: CupertinoTextField(
focusNode: focusNode,
),
),
),
);
expect(focusNode.hasFocus, false); // initial status
// Should accept requestFocus.
focusNode.requestFocus();
await tester.pump();
expect(focusNode.hasFocus, true);
// Disable the text field, now it should not accept requestFocus.
await tester.pumpWidget(
CupertinoApp(
home: Center(
child: CupertinoTextField(
enabled: false,
focusNode: focusNode,
),
),
),
);
// Should not accept requestFocus.
focusNode.requestFocus();
await tester.pump();
expect(focusNode.hasFocus, false);
});
testWidgets(
'text field respects theme',
(WidgetTester tester) async {