Как использовать динамические ссылки Flutter Firebase с go_router

я имел firebase dynamic linksинтегрирован и отлично работает в моем приложении, а позже я перешел на использование, и теперь я не знаю, что мне делать, чтобы заставить его работать или как с этим справиться.

Я представлял себе, что динамическая ссылка FB будет такой же, как pathна страницу в GoRouter routes, и go_router будет redirectна страницу автоматически, но я не думаю, что это так работает, и я не могу найти никаких ресурсов для этого.

Так что вопрос в том, как использовать Firebase DynamicLinksс go_router?

1 ответ

вот как я это сделал, вроде работает нормально :)

  • Когда приложение находится в остановленном режиме:

    Будущее main() async { ...

            // Closed state: getInitialLink is Used
    final PendingDynamicLinkData? initialLink =
        await FirebaseDynamicLinks.instance.getInitialLink();
    

    ...

затем через 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;
  }
}

Надеюсь, это помогло!

Другие вопросы по тегам