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 应用程序就是您所需要的。
我正在开发这个 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 应用程序就是您所需要的。