我正在使用如下波动导航:
return MaterialApp(
title: 'Title',
onGenerateRoute: _getRoute,
);
Route _getRoute(RouteSettings settings) {
if (settings.name == '/') {
return MaterialPageRoute(
settings: settings,
builder: (context) {
print('route / build'); //<---------------check
return LoginPage();
});
} else if (settings.name == '/someother') {
return MaterialPageRoute(
settings: settings,
builder: (context) {
return SomeOtherPage();
});
}
return null;
}
应用启动时,LoginPage将按预期打开,并且检查注释'route / build'
将打印到控制台。 LoginPage有两个TextField(用户名,密码),当我关注用户名字段时,'route / build'
再次打印,这意味着LoginPage被重建,当我填写用户名并转到下一个字段(密码)时,页面将再次重建并且用户名值丢失。
为什么要重建页面以及如何解决它?
更新:真正的问题不是因为重建,而是因为FocusNode
中的LoginPage
中的StatelessWidget
,因此FocusNode
的生命周期不是管理。这导致文本消失,并且两个焦点同时出现在页面重建的TextFields
上。