Flutter 深度链接与 uni_link 和 go_router 在 Android 上无法正常工作

问题描述 投票:0回答:1

我在我的应用程序中将 uni_links 包与 go_router 一起使用,我的深层链接正在打开该应用程序。我用这个方法来检索深层链接:

  Future<void> initUniLinks() async {
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      final initialLink = await getInitialLink();
      // Parse the link and warn the user, if it is not correct,
      // ...
      context.go('someLocation');
    } on PlatformException {
      // Handle exception by warning the user their action did not succeed
      // return?
    }
  }

这在 iOS 上运行得非常好。然而,在 Android 上,打开深层链接时,它会自动将该链接视为

path
,并且
go_router
尝试导航到该位置,但会失败,因为深层链接不是实际位置。我正在从深层链接创建位置,但该链接中还有其他信息,因此链接不应该是确切的路径

它还调用

initUniLink
并转到上面代码中调用的位置(context.go(
someLocation
))。但同时 go_router 失败并触发
errorBuilder
,因为路径与任何位置都不匹配.

我在这里做错了什么?为什么 Android 立即使用链接作为路径?我怎样才能避免这种情况?

我唯一的想法是捕获路由器内部的链接

redirect
并检查它是否是深层链接。如果是这样,我可以简单地将用户导航到 HomeView。而且
initUniLink
无论如何都会起作用。但这感觉不对,因为甚至不应该调用
go_router
来从深层链接推送到该位置。

有什么想法吗?为每一次帮助感到高兴。如果您需要更多信息,请告诉我!

android dart deep-linking flutter-go-router gorouter
1个回答
0
投票
**<activity
    android:name=".MainActivity"
    android:launchMode="singleTop"
    android:label="Your App">
    <intent-filter android:label="filter_react_native">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="your_scheme"
            android:host="your_host"
            android:pathPrefix="/your_path_prefix" />
    </intent-filter>
</activity>

** 在AndroidManifest.xml中配置深层链接:

final goRouter = GoRouter(
  navigatorKey: goRouterKey,
  navigator: Navigator(onGenerateRoute: goRouter.goRouterFunc),
  initialLocation: "/",
  errorBuilder: (BuildContext context, String location) {
    // Check if the location is a deep link, and navigate accordingly
    if (isDeepLink(location)) {
      context.go('HomeView');
    } else {
      // Handle other errors
    }
  },
);

评估 go_router 的必要性: 评估 go_router 是否会导致与 Android 深层链接处理冲突。如果 go_router 不是必需的,请考虑使用默认的 Flutter 导航。

go_router 中的自定义重定向处理:

© www.soinside.com 2019 - 2024. All rights reserved.