Навигация не работает, когда приложение уже запущено и используются ссылки Firebase Dynami c - PullRequest
1 голос
/ 07 апреля 2020

У меня есть этот виджет загрузчика, который проверяет наличие ссылок Dynami c и перемещается по маршруту /game (виджет gamePage()), если приложение было открыто с использованием ссылки Dynami c. если приложение было открыто вручную, оно будет перемещаться по маршруту /home.

Мой код прекрасно работает, когда приложение закрывается, а затем открывается по динамической ссылке c. Но когда приложение уже открыто и находится на домашней странице, код не работает, поскольку контекст пуст.

Loader.dart

class Loader extends StatefulWidget {
  @override
  _LoaderState createState() => _LoaderState();
}

class _LoaderState extends State<Loader> {


    Future<void> initDynamicLinks() async {
        final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
        final Uri deepLink = data?.link;
        print(deepLink);
        if (deepLink != null) {
          Navigator.pushReplacementNamed(context, '/game');  //this works because app has just started
        }
        else{
          FirebaseDynamicLinks.instance.onLink(
              onSuccess: (PendingDynamicLinkData dynamicLink) async {
                final Uri deepLink = dynamicLink?.link;

                if (deepLink != null) {
                  print(context);     // prints null
                  Navigator.pushReplacementNamed(context, '/game'); //this does not work because the app is already running and its on /home and context is null
                }
              },
              onError: (OnLinkErrorException e) async {
                print('error Opening the link');
                print(e.message);
              }
          );
          Navigator.pushReplacementNamed(context, '/home');  // load home widget if there are no deep links
        }
      }

    @override
    void initState(){
      super.initState();
      initDynamicLinks();
    }


    @override
    Widget build(BuildContext context) {
       //Loading animation widget code
    }
}

main.dart

void main() {
  runApp(MaterialApp(
    initialRoute: "/load",
    routes:<String, WidgetBuilder> {
      '/load': (context) => Loader(),
      '/home': (context) => Home(),
      '/game': (context) => gamePage(),
    },
  ),
  );
}

Я новичок во Флаттере, поэтому любая помощь приветствуется. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...