Push-уведомление Flatter Firebase не перенаправляется на конкретную страницу - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь перейти на определенную страницу при нажатии на уведомление.Обратные вызовы onResume и onMessage вызываются, когда я нажимаю на уведомление и вижу сообщение на экране журнала.Однако, когда я пытаюсь перейти на определенную страницу, я не могу этого сделать, и в журнале тоже нет сообщения об ошибке.PS Когда я использовал клавишу Navigator для доступа к состоянию контекста (поскольку в initState нельзя использовать навигатор), я получил сообщение об отсутствии контекста для построения.В чем ошибка ??

Я пробовал Navigator.push, Вызов метода и маршрутизацию из этого метода, использовал клавишу навигатора.

void initState() {
messaging.configure(
  onMessage: (Map<String, dynamic> message) async {
    print('onMessage: $message');
    Navigator.of(context).push(
        MaterialPageRoute<BuildContext>(builder: (_) => PageContent(value:1)));
  },
  onLaunch: (Map<String, dynamic> message) async {
    print('onLaunch: $message');
    Navigator.of(context).push(
        MaterialPageRoute<BuildContext>(builder: (_) => PageContent(value:2)));
  },
  onResume: (Map<String, dynamic> message) async {
    print('onResume:-  This is the message  $message');
    Navigator.of(context).push(
        MaterialPageRoute<BuildContext>(builder: (_) => MoviesList()));
  },
);

Я ожидаю, что код будет загружен, когдауведомление касается и направляет на новую страницу (MoviesList или PageContent в моем случае).Но виден только мой домашний экран.

1 Ответ

0 голосов
/ 24 мая 2019

Контекст недоступен в состоянии инициализации

Я сталкивался с этой проблемой и решался с использованием понятий редукса

добавить ключ в глобальном состоянии, например appNavigator

пример кода для глобального состояния приложения (app_state.dart),

import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:flutter/material.dart' hide Builder;

part 'app_state.g.dart';

abstract class AppState implements Built<AppState, AppStateBuilder> {
  factory AppState([AppStateBuilder updates(AppStateBuilder builder)]) =
      _$AppState;

  AppState._();

  static AppState initState() {
    return new AppState((AppStateBuilder b) {
      b
        ..appNavigator = new GlobalKey<NavigatorState>(debugLabel: 'debugLabel')
        .. isLoggedIn = false
        ..isLoading = false;

    });
  }

  // Never change this key through out the app lifecycle
  GlobalKey<NavigatorState> get appNavigator;

  // login state ***************************************************************************
  bool get isLoggedIn;

  // indicates loading state ***************************************************************************
  bool get isLoading;

}

отправка действия onMessage, полученного из уведомления, такого как

onMessage: (Map<String, dynamic> message) async {
    print('onMessage: $message');
store.dispatch(new RedirectUserOnNotification());
  },

и в промежуточном программном обеспечении к определенному маршрутустраница с необходимыми условиями проверки.

void redirectuser(Store<AppState> store, RedirectUserOnNotification action,
    NextDispatcher next) async {
    store.state.appNavigator.currentState.pushNamed(someRouteName);
  next(action);
}

Примечание. Я использовал концепции build_value в файле модели

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