如何通过 go_router 使用 Flutter Firebase 动态链接

Fad*_*del 5 flutter firebase-dynamic-links gorouter

我已经firebase dynamic links在我的应用程序中集成并工作正常,后来我改为使用go_router,现在我不知道应该做什么才能让它工作或如何处理它。

我想象的方式是 FB 动态链接将与 中的页面path相同,并且 go_router 将自动转到该页面,但我不认为这就是它的工作原理,而且我找不到任何资源为了这。pathGoRouter routesredirect

那么问题是如何使用Firebase DynamicLinkswith go_router

Mat*_*Mat 2

我就是这样做的,看起来工作正常:)

  • 当应用程序处于终止模式时:

    未来 main() 异步 { ...

    // Closed state: getInitialLink is Used
    final PendingDynamicLinkData? initialLink =
        await FirebaseDynamicLinks.instance.getInitialLink();
    
    Run Code Online (Sandbox Code Playgroud)

    ...

然后通过 runApp(MtApp(initialRoute: initialLink)) 将其传递给 GoRouter.initialLocation 字段或 GoRouter.redirect 函数,具体取决于您如何使用它。

  • 当应用程序处于后台时:

用您创建的 statefulWidget 包装您的顶部小部件,如下所示:

AHDynamicLinksManager 类扩展

 StatefulWidget {
  final Widget child;
  const AHDynamicLinksManager({required this.child, Key? key})
      : super(key: key);

  @override
  State<AHDynamicLinksManager> createState() => _AHDynamicLinksManagerState();
}



class _AHDynamicLinksManagerState extends State<AHDynamicLinksManager> {

  @override
  void initState() {
    super.initState();
    FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
      String goingTo = dynamicLinkData.link.path;
      GoRouter.of(context).go(goingTo);
    }).onError((error) {
      GoRouter.of(context).go("/errorpage/$error");
    });
  }

  @override
  Widget build(BuildContext context) {
    return widget.child;
  }
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助!