路由在 flutter 中未按预期工作

Aht*_*tar 3 dart flutter

在 Flutter 应用程序中,我在 main.dart 中有以下代码

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

我的 Router.dart 有以下代码

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

我的 home_view.dart 有以下代码

\n
class HomeView extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    print('homeview');\n    return Scaffold();\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
Launching lib\\main.dart on Android SDK built for x86 in debug mode...\n\xe2\x88\x9a Built build\\app\\outputs\\apk\\debug\\app-debug.apk.\nConnecting to VM Service at ws://127.0.0.1:56463/QrArHr5Zg54=/ws\nD/EGL_emulation(13000): eglMakeCurrent: 0xd5f1a540: ver 3 1 (tinfo 0xd5f0f880)\nI/flutter (13000): setting.name: /\nI/flutter (13000): setting.name: /login\nI/flutter (13000): homeview\n
Run Code Online (Sandbox Code Playgroud)\n

由于初始路由设置为“/login”,我不确定为什么我会得到

\n
I/flutter (13000): setting.name: / and \nI/flutter (13000): homeview\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Zak*_*kir 5

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