Flutter - перенаправление после получения уведомления Firebase - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть класс fcm_service (этот сервис не является виджетом) с моим методом настройки firebase:

firebaseMessaging.configure(onLaunch: (Map<String, dynamic> msg) {
  print("onLaunch called");
}, onResume: (Map<String, dynamic> msg) {
  print("onResume called");
  Navigator.of(context).pop();
}, onMessage: (Map<String, dynamic> msg) {
  print("onMessage called : " + msg.toString());
  Navigator.of(context).pop();
});

Я хочу быть перенаправлен на мою главную страницу в "onResume", но ничего не происходит.Когда я нажимаю на уведомление, вызывается onResume (печать работает).

Что я пробовал:

  • Вызов моей страницы как: new MainPage ();

  • Установка контекста моего родительского виджета в моем классе fcm_service и использование навигатора, как в коде выше.

Возможно ли это дажебыть перенаправленным через этот класс, который не является виджетом?

РЕДАКТИРОВАТЬ:

Вот мой основной класс:

class PreesmApp extends StatefulWidget {
   @override
   _PreesmAppState createState() => _PreesmAppState();
}

class _PreesmAppState extends State<PreesmApp>{
  AuthenticationBloc _authenticationBloc;
  final FCMService fcmService = Injector.getInjector().get<FCMService>();

  @override
  void initState() {
    _authenticationBloc = AuthenticationBloc();
    _authenticationBloc.dispatch(AppStarted());
    super.initState();
    fcmService.setContext(context);
  }

  @override
  void dispose() {
    _authenticationBloc.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return BlocProvider<AuthenticationBloc>(
        bloc: _authenticationBloc,
        child: MaterialApp(
          supportedLocales: [
            const Locale('en', 'EN'),
        const Locale('fr', 'BE')
      ],
      localizationsDelegates: [
        const DemoLocalizationsDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate
      ],
      localeResolutionCallback:
          (Locale locale, Iterable<Locale> supportedLocales) {
        for (Locale supportedLocale in supportedLocales) {
          if (supportedLocale.languageCode == locale.languageCode ||
              supportedLocale.countryCode == locale.countryCode) {
            return supportedLocale;
          }
        }

        return supportedLocales.first;
      },
      debugShowCheckedModeBanner: false,
      home: BlocBuilder<AuthenticationEvent, AuthenticationState>(
        bloc: _authenticationBloc,
        builder: (BuildContext context, AuthenticationState state) {
          if (state is AuthenticationUninitialized) {
            return SplashScreen();
          }
          if (state is AuthenticationAuthenticated) {
            return DashboardPage();
          }
          if (state is AuthenticationUnauthenticated) {
            return AuthenticationPage();
          }
          if (state is AuthenticationLoading) {
            return LoadingIndicator();
          }
        },
      ),
      routes: {
        '/login': (context) =>  AuthenticationPage(),
        '/dashboard': (context) =>  DashboardPage(),
        'menu': (context) =>  MenuPage(),
        '/kanbanBoard': (context) =>  KanbanBoardPage(),
        '/listBoard': (context) =>  ListBoardPage(),
        '/ganttBoard': (context) =>  GanttBoardPage(),
        '/preesm': (context) =>  PreesmApp(),
      },
      theme: ThemeSwitcher.of(context).themeData,
    ));
  }
}

И это мой установщик контекста в fcm_service

  setContext(BuildContext c) {
    this.context = c;
  }

1 Ответ

1 голос
/ 25 апреля 2019
Is it even possible to be redirected through this class which is not a widget ?

Пока у вас есть BuildContext как context , я бы сказал да. Вы можете выдвинуть новые виджеты, как это

Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondRoute()),

Вы пытались передать BuildContext вашему, скажем, FirebaseMessaging классу, когда создавали его? Так что вы можете толкать новые виджеты?

Здесь Навигация по кулинарной книге ref

Не уверен, поможет ли это тебе.

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