路由无法正常工作

时间:2020-07-23 17:56:10

标签: flutter dart

在Flutter应用中,main.dart中包含以下代码

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(),
      initialRoute: '/login',
      onGenerateRoute: Router.generateRoute,
    );

我的Router.dart具有以下代码

class Router {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    print('setting.name: ${settings.name}');
    switch (settings.name) {
      case '/':
        return MaterialPageRoute(builder: (_) => HomeView());
      case '/login':
        return MaterialPageRoute(builder: (_) => LoginView());
      case '/post':
        return MaterialPageRoute(builder: (_) => PostView());
      default:
        return MaterialPageRoute(
          builder: (_) {
            return Scaffold(
              body: Center(
                child: Text('No Route for ${settings.name}'),
              ),
            );
          },
        );
    }
  }
}

并且我的home_view.dart具有以下代码

class HomeView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print('homeview');
    return Scaffold();
  }

我正在router.dart中打印settings.name的值。启动应用程序时,我在调试控制台中获得以下输出:

Launching lib\main.dart on Android SDK built for x86 in debug mode...
√ Built build\app\outputs\apk\debug\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:56463/QrArHr5Zg54=/ws
D/EGL_emulation(13000): eglMakeCurrent: 0xd5f1a540: ver 3 1 (tinfo 0xd5f0f880)
I/flutter (13000): setting.name: /
I/flutter (13000): setting.name: /login
I/flutter (13000): homeview

由于initialRoute设置为'/ login',所以我不确定为什么会得到

I/flutter (13000): setting.name: / and 
I/flutter (13000): homeview

我希望它直接进入'/ login'案例并呈现LoginView。有人可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为您在initialRoute中使用了斜线。例如,如果将路由/stocks/HOOLI用作[initialRoute],则[Navigator]将在启动时推送以下路由://stocks/stocks/HOOLI。这样做是为了进行深层链接。 https://api.flutter.dev/flutter/widgets/WidgetsApp/initialRoute.html。只需从初始路径中删除斜线,它将直接推动该路径。