【问题标题】:Flutter Navigator and Routing in separate files showing error: Could not find a generator for route RouteSettings("/details", null) in the _WidgetFlutter Navigator 和 Routing 在单独的文件中显示错误:在 _Widget 中找不到路由 RouteSettings("/details", null) 的生成器
【发布时间】:2021-05-20 04:04:13
【问题描述】:

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

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

在 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***
    );
  }

【问题讨论】:

  • 我刚刚发现,当我从编辑器中复制代码时,我犯了一个错误。我已经更新了我的问题。很抱歉造成混乱...

标签: flutter routes navigation


【解决方案1】:

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

正如您所说,您在上面的 cmets 中将 /details 更新为 /homepage。但仍然无法正常工作,请确保您进行了完全重新加载,而不仅仅是热重新加载。

Navigator.pushReplacementNamed(context, "/homepage");

不要不要在您的代码中创建第二个材料应用程序,如上所示。当您创建另一个材质应用程序时,您还会获得一个全新的导航器堆栈。

改用脚手架。只需 1 个材料应用程序即可。

【讨论】:

  • 您对 1 材料应用规则是正确的。事实证明,除了导航之外,我还犯了一些其他错误。现在我修好了它们。谢谢!
【解决方案2】:
   class Nav2App extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
         initialRoute: '/',
          routes: {
            '/': (context) => Login(),
            '/homepage': (context) => HomePage(),
          },
        );
      }
    }

【讨论】:

  • 是的,'/details' 应该是 '/homepage',这是我将代码复制到 StackOverflow 时的拼写错误。在我的本地编辑器中,onPressed 函数中有“/homepage”导航器。我已经更新了这个问题。很抱歉造成混乱。
  • 将 initialRoute 添加到您的 materialApp()
【解决方案3】:

您的/details 名称没有导航器。

如下更改您的登录代码:

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

【讨论】:

  • 是的,'/details' 应该是 '/homepage',这是我将代码复制到 StackOverflow 时的拼写错误。在我的本地编辑器中,onPressed 函数中有“/homepage”导航器。我已经更新了这个问题。很抱歉造成混乱。
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 2022-12-04
  • 2022-08-15
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多