Firebase Cloud Messaging onLaunch обратный вызов - PullRequest
0 голосов
/ 10 марта 2020

Моя структура приложения немного запутана, но мне нужно сначала добавить этот патч, а затем я реструктурирую всю логику c. Дело в том, что я сначала проверяю, есть ли у пользователя firebase, затем, если он есть, я использую StreamBuilder для получения текущего профиля пользователя из Firestore, тогда у меня есть метод _firebaseMessaging.configure, потому что onLaunch и onResume я использую этот обратный вызов:

void _navigateToGestorResevas(Map<String, dynamic> message, User currentUser) {

    Navigator.push(context,
        MaterialPageRoute(builder: (context) =>
            GestorScreen(user: currentUser)));
  }

Потому что мне нужно отправить пользователя на этот экран, где он получит сообщение из firebase. onResume это работает нормально, но onLaunch выходит на экран и выбирает данные, но есть примерно 20 секунд, когда есть какой-то сбой. Это переключается примерно 20-30 раз между двумя состояниями, где у меня есть данные, а у меня нет данных снимка в этом _initState fun c:

final snapshot = await _dbRef.child('mensajes').child(widget.user.id).once();
    if (snapshot.value != null) {
      setState(() {
        hayMensajes = true;
      });
      final data = snapshot.value;
      for (var entry in data.entries) {
        Message message = Message.fromJson(entry.value);
        setState(() {
          message.add(message);
        });
      }
    } else {
      setState(() {
        hayMensajes = false;
      });
    }

У кого-нибудь есть идея, что я делаю неправильно?

1 Ответ

1 голос
/ 11 марта 2020

Если я не ошибаюсь, есть некоторые активные проблемы с обратным вызовом FCM onLaunch с флаттером. Некоторые из них до сих пор не исправлены. Одной из проблем, с которой пришлось столкнуться большинству людей, было то, что onLaunch callback вызывался несколько раз. Я не знаю, почему это произошло, но, как и в вашем случае, вы, возможно, сможете избавиться от этой проблемы с помощью некоторых временных исправлений.

Если один и тот же экран выдвигается снова и снова и глючит, вы может вытолкнуть стек, пока он не достигнет того, который вы хотели открыть, и установить условие на навигатор pu sh, только если новый маршрут отличается от старого. Используя названные маршруты,

Navigator.popUntil(context, ModalRoute.withName(routeName));

if (ModalRoute.of(context).settings.name != routeName) {
      Navigator.pushNamed(context, routeName);
}

Я не уверен, что это была проблема, которую вы задали, но я надеюсь, что по крайней мере мой ответ каким-то образом поможет.

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