Flutter 颤振导航器和路由在单独的文件中显示错误:在“U”小部件中找不到路由路由设置的生成器(“详细信息”,null)

Flutter 颤振导航器和路由在单独的文件中显示错误:在“U”小部件中找不到路由路由设置的生成器(“详细信息”,null),flutter,routes,navigation,Flutter,Routes,Navigation,我正在开发这个颤振应用程序,并试图使路由在不同的文件上工作。现在我有了一个登录页面,其中有一个登录按钮。单击此登录按钮时,应用程序应导航到主页。我看了一些教程,但它们都将导航器和其他小部件放在同一页上 就我而言,我的文件结构是: 在routes.dart中: import 'package:flutter/material.dart'; import 'widgets/login.dart'; import 'widgets/homepage.dart'; void main() { r

我正在开发这个颤振应用程序,并试图使路由在不同的文件上工作。现在我有了一个登录页面,其中有一个登录按钮。单击此登录按钮时,应用程序应导航到主页。我看了一些教程,但它们都将导航器和其他小部件放在同一页上

就我而言,我的文件结构是:

在routes.dart中:

import 'package:flutter/material.dart';
import 'widgets/login.dart';
import 'widgets/homepage.dart';

void main() {
  runApp(Nav2App());
}

class Nav2App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: {
        '/': (context) => Login(),
        '/homepage': (context) => HomePage(),
      },
    );
  }
}
在login.dart中:

child: TextButton(
          style: ButtonStyle(
              ...
              ))),
          child: const Text('Login'),
          onPressed: () {
            Navigator.pushNamed(
              context,
              '/homepage',
            );
          },
        ),
      ),
我想我需要在main.dart做点什么,比如:

  Widget build(BuildContext context) {
    return MaterialApp(
      // debugShowCheckedModeBanner: false,
      title: 'Flutter Login Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyLoginPage(title: 'login page'),
      routes: ***something***
    );
  }

您的
/details
名称没有导航器

更改您的登录代码,如下所示:

child: TextButton(
          style: ButtonStyle(
              ...
              ))),
          child: const Text('Login'),
          onPressed: () {
            Navigator.pushNamed(
              context,
              '/homepage',
            );
          },
        ),
      ),

您的
/details
名称没有导航器

更改您的登录代码,如下所示:

child: TextButton(
          style: ButtonStyle(
              ...
              ))),
          child: const Text('Login'),
          onPressed: () {
            Navigator.pushNamed(
              context,
              '/homepage',
            );
          },
        ),
      ),

您需要将登录页面替换为主页。因此,使用推送替换。这样他们就不会在左上角有后退按钮

正如你所说,你在上面的评论中更新了/详情到/主页。但仍然无法工作,请确保您进行了完全重新加载,而不仅仅是热重新加载

Navigator.pushReplacementNamed(context, "/homepage");
不要像上面显示的那样在代码中制作第二个材质应用程序。当你创建另一个材质应用程序时,你也会得到一个全新的导航器堆栈


用脚手架代替。1个material应用程序是您所需要的全部。

您将希望用主页替换登录页面。因此,使用推送替换。这样他们就不会在左上角有后退按钮

正如你所说,你在上面的评论中更新了/详情到/主页。但仍然无法工作,请确保您进行了完全重新加载,而不仅仅是热重新加载

Navigator.pushReplacementNamed(context, "/homepage");
不要像上面显示的那样在代码中制作第二个材质应用程序。当你创建另一个材质应用程序时,你也会得到一个全新的导航器堆栈


用脚手架代替。1个material应用程序就是您所需要的。

我刚刚发现,当我从编辑器复制代码时,我犯了一个错误。我已经更新了我的问题。很抱歉造成混淆…我刚刚发现,当我从编辑器复制代码时,我犯了一个错误。我已经更新了我的问题。很抱歉造成混淆…是的,“/details”应该是“/homepage”,这是我将代码复制到StackOverflow时的一个输入错误。在我的本地编辑器中,
onPressed
功能中有“/homepage”导航器。我已经更新了问题。很抱歉造成混淆。将initialRoute添加到materialApp()是的,“/details”应该是“/homepage”,这是我将代码复制到StackOverflow时的一个输入错误。在我的本地编辑器中,
onPressed
功能中有“/homepage”导航器。我已经更新了问题。很抱歉造成混淆。将initialRoute添加到materialApp()是的,“/details”应该是“/homepage”,这是我将代码复制到StackOverflow时的一个输入错误。在我的本地编辑器中,
onPressed
功能中有“/homepage”导航器。我已经更新了问题。很抱歉造成混淆。是的,“/details”应该是“/homepage”,这是我将代码复制到StackOverflow时的一个输入错误。在我的本地编辑器中,
onPressed
功能中有“/homepage”导航器。我已经更新了问题。抱歉造成混淆。关于1物料应用规则,您是对的。事实证明,除了导航,我还犯了一些其他错误。现在我修好了。非常感谢。关于1材质应用规则,您是对的。事实证明,除了导航,我还犯了一些其他错误。现在我修好了。非常感谢。