我在我的应用程序中将 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
来从深层链接推送到该位置。
有什么想法吗?为每一次帮助感到高兴。如果您需要更多信息,请告诉我!
**<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 中的自定义重定向处理: