gpt4 book ai didi

firebase - 当应用程序已经在运行并且使用Firebase动态链接时,导航不起作用

转载 作者:行者123 更新时间:2023-12-03 03:56:17 25 4
gpt4 key购买 nike

我有这个Loader Widget,用于检查动态链接并导航到/game route(gamePage() Widget)(如果使用动态链接打开了应用程序)。如果应用是手动打开的,它将导航到/home路线。

我的代码在关闭应用程序然后通过动态链接打开时效果很好。
但是,当应用程序已经打开并且位于主页上时,由于上下文为空,因此代码无法正常工作。

加载程序

class Loader extends StatefulWidget {
@override
_LoaderState createState() => _LoaderState();
}

class _LoaderState extends State<Loader> {


Future<void> initDynamicLinks() async {
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
print(deepLink);
if (deepLink != null) {
Navigator.pushReplacementNamed(context, '/game'); //this works because app has just started
}
else{
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;

if (deepLink != null) {
print(context); // prints null
Navigator.pushReplacementNamed(context, '/game'); //this does not work because the app is already running and its on /home and context is null
}
},
onError: (OnLinkErrorException e) async {
print('error Opening the link');
print(e.message);
}
);
Navigator.pushReplacementNamed(context, '/home'); // load home widget if there are no deep links
}
}

@override
void initState(){
super.initState();
initDynamicLinks();
}


@override
Widget build(BuildContext context) {
//Loading animation widget code
}
}

主镖
void main() {
runApp(MaterialApp(
initialRoute: "/load",
routes:<String, WidgetBuilder> {
'/load': (context) => Loader(),
'/home': (context) => Home(),
'/game': (context) => gamePage(),
},
),
);
}

我是Flutter的新手,因此感谢您的帮助。谢谢。

最佳答案

你是对的。没有上下文就行不通。因此,每次深层链接调用时,您都需要提供一个上下文。
为此,请为管理深层链接创建一个自定义类。然后,您可以通过提供上下文来启动该深层链接。
请参见下面的示例。
定制类

class DynamicLinkService {

Future handleDynamicLinks(BuildContext context) async {
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();

_handleDeepLink(data, context);

FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
// handle link that has been retrieved
_handleDeepLink(dynamicLink, context);
}, onError: (OnLinkErrorException e) async {
print('Link Failed: ${e.message}');
});
}

void _handleDeepLink(PendingDynamicLinkData data, BuildContext context) {
final Uri deepLink = data?.link;
if (deepLink != null) {
print('_handleDeepLink | deeplink: $deepLink');

var isPost = deepLink.pathSegments.contains('post');
var isInvite = deepLink.pathSegments.contains('invite');
if(isInvite){
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
NavigationHomeScreen()), (Route<dynamic> route) => false);
}
}
}
}
从您的Loader小部件启动深层链接
class Loader extends StatefulWidget {
@override
_LoaderState createState() => _LoaderState();
}

class _LoaderState extends State<Loader> {

final DynamicLinkService _dynamicLinkService = DynamicLinkService();

@override
void initState(){
super.initState();
_dynamicLinkService.handleDynamicLinks(context);
}


@override
Widget build(BuildContext context) {
//Loading animation widget code
}
}

关于firebase - 当应用程序已经在运行并且使用Firebase动态链接时,导航不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61078089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com