【问题标题】:Flutter Firebase Dynamic Link Navigator.push not navigatingFlutter Firebase Dynamic Link Navigator.push 不导航
【发布时间】:2021-01-30 05:47:09
【问题描述】:

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

代码实现

ma​​in.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 动态链接的问题,感觉更像是导航器问题,但我无法在此处识别问题,因为此 导航器 在整个项目中正常工作,期望在这里。

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 来推送目标屏幕?
  • @Omatt 我认为你是对的。当我删除我的 Authenticator 类时,它工作正常。 Authenticator 正在检查共享偏好中的用户数据,并在其基础上推送新页面。在启动屏幕上等待 3 秒后调用身份验证器?所以也许它覆盖了主要上下文。如何管理 main 的上下文,即使它被另一个页面调用覆盖?

标签: firebase flutter firebase-dynamic-links dynamic-links


【解决方案1】:

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

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

【讨论】:

  • 感谢您分享这看起来很有希望(博客文章它使代码更易于管理),但我通过在我的材料应用程序中添加 navigatorKey 并使用它来导航来解决它。但从长远来看,我会将其更改为 onGeneratedRoute。
猜你喜欢
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2020-04-08
  • 2023-02-16
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多