Unverified Commit a05b1fff authored by xubaolin's avatar xubaolin Committed by GitHub

TextField.autofocus should skip the element that never layout (#87109)

parent d0bfe170
......@@ -1555,7 +1555,7 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
if (!_didAutoFocus && widget.autofocus) {
_didAutoFocus = true;
SchedulerBinding.instance!.addPostFrameCallback((_) {
if (mounted) {
if (mounted && renderEditable.hasSize) {
FocusScope.of(context).autofocus(widget.focusNode);
}
});
......
......@@ -9,6 +9,24 @@ import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
// Regression test for https://github.com/flutter/flutter/issues/87099
testWidgets('TextField.autofocus should skip the element that never layout', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Navigator(
pages: <Page<void>>[_APage(), _BPage()],
onPopPage: (Route<dynamic> route, dynamic result) {
return false;
},
),
),
),
);
expect(tester.takeException(), isNull);
});
testWidgets('Dialog interaction', (WidgetTester tester) async {
expect(tester.testTextInput.isVisible, isFalse);
......@@ -531,3 +549,19 @@ void main() {
expect(focusNodeB.hasFocus, true);
}, variant: TargetPlatformVariant.desktop());
}
class _APage extends Page<void> {
@override
Route<void> createRoute(BuildContext context) => PageRouteBuilder<void>(
settings: this,
pageBuilder: (_, __, ___) => const TextField(autofocus: true),
);
}
class _BPage extends Page<void> {
@override
Route<void> createRoute(BuildContext context) => PageRouteBuilder<void>(
settings: this,
pageBuilder: (_, __, ___) => const Text('B'),
);
}
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