我创建了一个类似于Navigate to a new screen and back示例的示例项目。我在每个屏幕上都拥有TextField
和autofocus: true
的唯一区别:
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: 'Navigation Basics',
home: FirstScreen(),
));
}
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("FirstScreen build");
return Scaffold(
body: Column(
children: <Widget>[
RaisedButton(
child: Text('Next screen'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
},
),
TextField(
decoration: InputDecoration(),
onEditingComplete: () {},
autofocus: true,
)
],
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("SecondScreen build");
return Scaffold(
body: Column(
children: <Widget>[
RaisedButton(
child: Text('Next screen'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ThirdScreen()),
);
},
),
TextField(
decoration: InputDecoration(),
onEditingComplete: () {},
autofocus: true,
)
],
),
);
}
}
class ThirdScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("ThirdScreen build");
return Scaffold(
body: Column(
children: <Widget>[
RaisedButton(
child: Text('Next screen'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => FourthScreen()),
);
},
),
TextField(
decoration: InputDecoration(),
onEditingComplete: () {},
autofocus: true,
)
],
),
);
}
}
class FourthScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("FourthScreen build");
return Scaffold(
body: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(),
onEditingComplete: () {},
autofocus: true,
)
],
),
);
}
}
当我从ThirdScreen
导航到FourthScreen
时,我的日志如下:
I/flutter ( 7523): FourthScreen build
I/flutter ( 7523): SecondScreen build
I/flutter ( 7523): ThirdScreen build
I/flutter ( 7523): FourthScreen build
I/flutter ( 7523): SecondScreen build
I/flutter ( 7523): ThirdScreen build
I/flutter ( 7523): FourthScreen build
答案 0 :(得分:0)
我尝试运行您提供的repro,但无法复制您报告的问题。导航到下一个屏幕后,以前的屏幕不会重建。
颤抖的医生
[✓] Flutter (Channel stable, 1.22.3, on Mac OS X 10.15.7 19H2, locale en)
• Flutter version 1.22.3
• Framework revision 8874f21e79 (5 days ago), 2020-10-29 14:14:35 -0700
• Engine revision a1440ca392
• Dart version 2.10.3
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Platform android-29, build-tools 29.0.2
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 12.0.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.0.1, Build version 12A7300
• CocoaPods version 1.9.0
[!] Android Studio (version 4.1)
• Android Studio at /Applications/Android Studio.app/Contents
✗ Flutter plugin not installed; this adds Flutter specific functionality.
✗ Dart plugin not installed; this adds Dart specific functionality.
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
[✓] VS Code (version 1.50.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.15.1
[✓] Connected device (2 available)
• AOSP on IA Emulator (mobile) • emulator-5554 • android-x86 • Android 9 (API 28) (emulator)
• iPhone 11 (mobile) • 216904B4-E876-4AC5-9BCF-F77CD19B9338 • ios • com.apple.CoreSimulator.SimRuntime.iOS-14-0 (simulator)
如果您仍然遇到问题,请提供最小程度的复制以及复制行为并将其提交到此处的步骤http://github.com/flutter/flutter/issues/