Saltar al contenido

Abra cierta página en la notificación de inserción usando la mensajería en la nube de firebase en flutter

Este equipo de especialistas pasados varios días de trabajo y de recopilar de información, encontramos la respuesta, esperamos que resulte útil para ti para tu trabajo.

Solución:

Tengo algo como esto, en mi clase FCM:

static StreamController> _onMessageStreamController =
      StreamController.broadcast();
static StreamController> _streamController =
      StreamController.broadcast();
static final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
static final Stream> onFcmMessage =
      _streamController.stream;

static setupFCMListeners() 
    print("Registered FCM Listeners");
    _firebaseMessaging.configure(
      onMessage: (Map message) async 
        _onMessageStreamController.add(message);
      ,
      onLaunch: (Map message) async 
        _streamController.add(message);
      ,
      onResume: (Map message) async 
        _streamController.add(message);
      ,
    );
  

  static Widget handlePath(Map dataMap) 
    var path = dataMap["route"];
    var id = dataMap["id"];
    return handlePathByRoute(path, id);
  

  static Widget handlePathByRoute(String route, String routeId) 
    switch (route) 
      case "user":
        return Profile(guid: routeId);
      case "event":
        return EventInfo(eventId: routeId);
      case "messaging":
        return MessagingView(guid: routeId);
      default:
        return null;
    
  

Mi main.dart se suscribe a la transmisión onFcmMessage, pero no necesita transmisiones para hacer todo esto. Además, necesita algún código para manejar la falla y el cierre de la transmisión.

Pero cuando la aplicación pasa a primer plano, recibe el mensaje en onMessage devolución de llamada o el onLaunch o onResume llamar de vuelta. Comprueba sus diferencias en los documentos de pub flutter de FCM.

Los métodos handlePath y handlePathByRoute son métodos que normalmente mi main.dart u otras clases que escuchan las notificaciones llaman para obtener la ruta a la que enrutar, pero simplemente puede llamarlos directamente reemplazando el código de flujo aquí como:

static setupFCMListeners() 
    print("Registered FCM Listeners");
    _firebaseMessaging.configure(
      onMessage: (Map message) async 
        print("Message: $message"); // Not handling path since on notification in app it can be weird to open a new page randomly.
      ,
      onLaunch: (Map message) async 
        handlePath(message);
      ,
      onResume: (Map message) async 
        handlePath(message);
      ,
    );
  

Honestamente, puede que ni siquiera sea el mejor o incluso un buen enfoque, pero debido a la falta de documentación, esto es con lo que estoy trabajando por ahora. ¡Me encantaría probar el enfoque de Günter Zöchbauer y ahorrar algo de creación de objetos si es posible!

¡Espero que esto sea útil! 🙂

EDITAR: Profile, EventInfo y MessagingView son tres clases que se extienden StatefulWidgetlo siento si eso no fue claro.

También puede intentar usar rutas con nombre, lo hacen más fácil como las rutas api y evitan muchas importaciones y tienen un enrutador central, pero AFAIK carecían de configuraciones de transición.

Reseñas y calificaciones

Si te ha resultado de ayuda este post, sería de mucha ayuda si lo compartes con el resto programadores de esta forma contrubuyes a extender nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.