如何解决Flutter Firebase Dynamic Link Navigator.push无法导航
我试图在扑朔迷离中实现Firebase Dynamic链接。但是,当我单击链接时,它会调用函数,但不会带我到指定页面。
代码实现
main.dart
申请的主要决赛
void main() {
Crashlytics.instance.enableInDevMode = true;
FlutterError.onError = Crashlytics.instance.recordFlutterError;
runZoned(() {
runApp(MyApp());
},onError: Crashlytics.instance.recordError);
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
DynamicLinks dynamicLinks = new DynamicLinks();
dynamicLinks.initDynamicLinks(context);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return LayoutBuilder(builder: (context,constraints) {
return OrientationBuilder(builder: (context,orientation) {
SizeConfig().init(constraints,orientation);
return MaterialApp(
title: 'APP NAME',theme: ThemeData(
primarySwatch: Colors.orange,brightness: Brightness.light,),debugShowCheckedModeBanner: false,home:SplashScreenMain(),);
});
});
}
}
dynamicLinkManager.dart
class DynamicLinks {
void initDynamicLinks(BuildContext context) async{
var data = await FirebaseDynamicLinks.instance.getinitialLink();
FirebaseDynamicLinks.instance.onLink(onSuccess: (dynamicLink) async {
print("Main = ${dynamicLink}");
var deepLink = dynamicLink?.link;
final queryParams = deepLink.queryParameters;
debugPrint('DynamicLinks onLink $deepLink');
print("queryParams $queryParams");
if(DynamicLinksConst.inviteUser == deepLink.path){
print("Step 1.......Code Works");
/* THIS PART CODE IS NOT WORKING */
Login.setActiveContext(context);
Navigator.push(context,EaseInOutSinePageRoute(
widget: SignupPage()),//MaterialPageRoute
);
}else{
Navigator.push(context,EaseInOutSinePageRoute(
widget: LoginPage()),//MaterialPageRoute
);
}
},onError: (e) async {
debugPrint('DynamicLinks onError $e');
});
}
}
控制台输出 这是输出,您可以看到它的返回数据被动态链接捕获。 我认为Firebase动态链接没有问题,感觉上更多的是Navigator问题,但由于此 Navigator 在整个项目预期的正常工作中,在这里我无法确定问题。>
EaseInOutSinePageRoute 只是将动画添加到导航中。
I/Flutter ( 395): Main = Instance of 'PendingDynamicLinkData'
I/Flutter ( 395): DynamicLinks onLink https://example.com/abc?para1=dataOne
I/Flutter ( 395): queryParams {para1: dataOne}
I/Flutter ( 395): Step 1.......Code Works
解决方法
如我的评论中所述,这里的问题是Navigator.push()
中未使用预期的BuildContext。
没有最少的复制,就很难提供具体的解决方案。由于您已经提到过您正在使用Authenticator
类来推送新页面/屏幕,因此在单个类中管理应用程序的屏幕可能更安全。这样,就更容易管理Navigator.push()
中使用的BuildContext。您可以检查此sample in this blog post并查看它是否适合您的用例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。