1

我正在尝试实现 Firebase 动态链接。但是当我单击链接时,它会调用函数但不会将我带到指定的页面。

代码实现

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(),
        );
      });
    });
  }
}

动态链接管理器.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
4

1 回答 1

1

正如我的评论中提到的,这里的问题是预期的 BuildContext 没有在Navigator.push().

如果没有最少的复制,就很难提供具体的解决方案。由于您提到您正在使用Authenticator推送新页面/屏幕的类,因此在单个类中管理应用程序的屏幕可能更安全。有了这个,管理在Navigator.push(). 您可以在此博客文章中查看此示例,看看它是否适合您的用例。

于 2020-10-19T19:06:11.107 回答