Flutter Navigator and Routing in separate files showing error: Could not find a generator for route RouteSettings("/details", null) in the _Widget

Flutter Navigator and Routing in separate files showing error: Could not find a generator for route RouteSettings("/details", null) in the _Widget

我正在开发这个 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***
    );
  }
   class Nav2App extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
         initialRoute: '/',
          routes: {
            '/': (context) => Login(),
            '/homepage': (context) => HomePage(),
          },
        );
      }
    }

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

更改您的登录代码如下:

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

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

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

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

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

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