Как открыть определенную страницу при уведомлении о своем сигнале, нажмите на флаттер? - PullRequest
0 голосов
/ 23 октября 2018

Я использую службу push-уведомлений OneSignal и хочу открыть приложение непосредственно на определенной странице при нажатии на уведомление.Я отправляю страницу через данные.Я попробовал navigator.push, но это не сработало, я думаю, из-за проблемы контекста.Я вызываю _initializeonesignal () после входа в систему, который содержит onesignal init и следующий код.

OneSignal.shared.setNotificationOpenedHandler((notification) {
  var notify = notification.notification.payload.additionalData;
  if (notify["type"] == "message") {
    //open DM(user: notify["id"])
  }
  if (notify["type"] == "user") {
   //open Profileo(notify["id"])
  }
  if (notify["type"] == "post") {
    //open ViewPost(notify["id"])
  }
  print('Opened');
});

1 Ответ

0 голосов
/ 14 декабря 2018

Вам нужно будет зарегистрировать глобальный дескриптор Navigator в основной платформе приложения - тогда вы сможете использовать его в своих обработчиках уведомлений ..

Итак - в нашем приложении в нашем основном приложении у нас есть:

    // Initialize our global NavigatorKey
    globals.navigatorKey = GlobalKey<NavigatorState>();

...
            return MaterialApp(
              title: 'MissionMode Mobile',
              theme: theme,
              initialRoute: _initialRoute,
              onGenerateRoute: globals.router.generator,
              navigatorKey: globals.navigatorKey,
            );

Ключом является navigatorKey: часть и сохранение его где-то, куда вы можете получить доступ куда-то еще ..

Затем в вашем обработчике:

OneSignal.shared.setNotificationOpenedHandler (_handleNotificationOpened);...

// What to do when the user opens/taps on a notification
void _handleNotificationOpened(OSNotificationOpenedResult result) {
  print('[notification_service - _handleNotificationOpened()');
  print(
      "Opened notification: ${result.notification.jsonRepresentation().replaceAll("\\n", "\n")}");

  // Since the only thing we can get current are new Alerts -- go to the Alert screen
  globals.navigatorKey.currentState.pushNamed('/home');
}

Это должно сработать - все равно для нас :)

...