如何检测应用程序是否使用 Flutter web 中的路由启动?

How do I detect if app was launched with a route in Flutter web?

我目前正在使用命名路由在我的应用程序中导航,我正在尝试检测是否使用路由来启动应用程序(特别是在网络上)。

例如,用户以前从未打开过我的应用程序,但他们点击了 link 某人发送给他们的格式 myApp.com/content/1234。我需要初始化一些库并在该页面(或任何其他页面)显示之前进行网络调用。

这是我的应用启动方式的简化版本

    MaterialApp(
      title: "My Title",
      onGenerateRoute: router.generateRoute,
      navigatorObservers: [
        FirebaseAnalyticsObserver(analytics: Analytics.analytics),
      ],
      home: Loading(),
      theme: ThemeData( ),
    );

如何检测应用程序在 flutter web 上的启动,或者仅检测应用程序是否通过路由启动?

如果您不想使用 Navigator 2(当您以 Web 为目标时推荐的导航处理方式),解决方案是使用 MaterialApp.onGenerateInitialRoutes.

MaterialApp 以给定路由开始时调用此回调(对于 Web - URL)。在其中,您可以检测路由是否需要任何其他设置,推送某种将执行加载的“启动”页面,然后重定向到请求的路由,示例实现如下:

MaterialApp(
  // ...
  onGenerateInitialRoutes: (navigator, route) => [
    MaterialPageRoute(
      builder: (context) => SplashScreen(), 
      settings: RouteSettings(
        arguments: SplashScreenArgs(destinationRoute: transformDeeplink(route)),
      ),
    ],
  ),
),

请注意此处的 transformDeeplink 函数 - 您应该实施自己的逻辑来决定是否允许使用给定路线进入您的应用程序。如果不是,则重定向到其他(默认)路由或显示某种错误页面。