在 Flutter 应用程序中,我在 main.dart 中有以下代码
\nclass 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 );\nRun Code Online (Sandbox Code Playgroud)\n我的 Router.dart 有以下代码
\nclass 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}\nRun Code Online (Sandbox Code Playgroud)\n我的 home_view.dart 有以下代码
\nclass HomeView extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n print('homeview');\n return Scaffold();\n }\nRun Code Online (Sandbox Code Playgroud)\n我正在 router.dart 中打印 settings.name 的值。当我启动应用程序时,我在调试控制台中得到以下输出:
\nLaunching 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\nRun Code Online (Sandbox Code Playgroud)\n由于初始路由设置为“/login”,我不确定为什么我会得到
\nI/flutter (13000): setting.name: / and \nI/flutter (13000): homeview\nRun Code Online (Sandbox Code Playgroud)\n我希望它直接转到“/login”案例并呈现 LoginView。有人可以解释这里发生了什么吗?
\n发生这种情况是因为您在initialRoute 中使用了斜杠。例如,如果将路由/stocks/HOOLI用作[initialRoute],则[Navigator] 将在启动时推送以下路由:/, /stocks, /stocks/HOOLI。这样做是为了深度链接。https://api.flutter.dev/flutter/widgets/WidgetsApp/initialRoute.html。只需删除初始路由中的斜杠,它就会直接推送该路由。