【问题标题】:How do I detect if app was launched with a route in Flutter web?如何检测应用程序是否在 Flutter web 中使用路由启动?
【发布时间】:2022-01-16 14:20:14
【问题描述】:

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

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

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

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

如何检测应用程序在 Flutter Web 上的启动,或者仅检测应用程序是否使用路由启动?

【问题讨论】:

  • onGenerateRoute 可以帮忙,你能把你目前在那里的东西贴出来吗?
  • 你看过MaterialApp.onGenerateInitialRoutes吗?
  • @mfkw1 成功了。你想添加答案还是我应该添加?
  • 今天晚些时候我会写更详细的答案;)
  • 我更喜欢使用navigator2 来制作flutter web

标签: flutter routes flutter-web


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2017-01-02
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多