Futter onGenerateRoute构建多次

时间:2019-10-09 05:28:40

标签: flutter

我正在使用如下波动导航:

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上。

0 个答案:

没有答案