Flutter Firebase Dynamic Link Navigator.push 不导航

Flutter Firebase Dynamic Link Navigator.push not navigating

我正在尝试快速实现 Firebase Dynamic links。但是当我点击 link 时它会调用函数但不会将我带到指定的页面。

代码实现

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 来处理动态链接。

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');
    });

  }

 



}

控制台输出 这是输出,您可以看到它的返回数据由动态 link 捕获。 我不认为这是 firebase dynamic link 的问题,感觉更像是 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。

没有最少的复现,很难提供具体的解决方案。由于您已经提到您正在使用推送新 page/screen 的 Authenticator class,因此在单个 class 中管理应用程序的屏幕可能更安全.这样,管理 Navigator.push() 中使用的 BuildContext 就更容易了。您可以查看此 sample in this blog post 并查看它是否适合您的用例。