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并查看它是否适合您的用例。