Je suis nouveau dans le flutter et j'essaie simplement de recevoir des notifications push Firebase sur mon application Flutter. Des notifications push sont reçues lorsque l'application est fermée et en arrière-plan. Mais lorsque l'application est ouverte, la notification push est reçue, mais elle n'affiche pas la notification d'alerte (je souhaite afficher le titre et le corps de la notification push comme une alerte dans mon application si elle est ouverte). Voici mon code pour cela.
_fcm.configure( onMessage: (Map<String, dynamic> message) async { showDialog( context: context, builder: (context) => AlertDialog( content: ListTile( title: Text(message['notification']['title']), subtitle: Text(message['notification']['body']), ), actions: <Widget>[ FlatButton( child: Text('Ok'), onPressed: () => Navigator.of(context).pop(), ), ], ), ); print("onMessage: $message"); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); }, );
Quelqu'un pourrait m'aider avec ça?
3 Réponses :
FCM vous propose trois rappels. OnResume
, OnLaunch
et OnMessage
.
Lorsque l'application est au premier plan, le onMessage
est déclenché et vous donne la possibilité d'effectuer toute action personnalisée.
Afin d'afficher une notification lorsque l'application est au premier plan, vous pouvez utiliser le package Flutter Local Notifications .
Vous ne pourrez peut-être pas voir une boîte de dialogue d'alerte en raison du manque de contexte dans le rappel onMessage. Essayez d' _fcm.configure
le _fcm.configure
intérieur
SchedulerBinding.instance.addPostFrameCallback((_){ [_fcm.configure block] });
Salut, j'ai essayé SchedulerBinding.instance.addPostFrameCallback ((_) {[_fcm.configure block]}); mais la boîte de dialogue d'alerte ne s'affiche toujours pas
Pourquoi utilisez-vous "showOverlayNotification"? Vous pouvez simplement utiliser showDialog et passer une boîte de dialogue d'alerte à la méthode showDialog. Avez-vous essayé cela?
Enfin, j'ai pu gérer mon problème en utilisant le package overlay_support
J'ai renvoyé les liens de questions suivants:
Flutter - Le Snackbar Firebase Messaging ne s'affiche pas
Flutter - comment obtenir le contexte actuel?
et j'ai géré mon problème en suivant le tutoriel et le package ci-dessous
tutoriel: https://medium.com/flutter-community/in-app-notifications-in-flutter-9c1e92ea10b3
package: https://pub.dev/packages/overlay_support/install
J'ai enveloppé mon widget MaterialApp () dans le widget OverlaySupport (). puis j'ajoute showOverlayNotification à mon _fcm.configure -> onMessage:
_fcm.configure( onMessage: (Map<String, dynamic> message) async { print("onMessage: $message"); showOverlayNotification((context) { return Card( margin: const EdgeInsets.symmetric(horizontal: 4), child: SafeArea( child: ListTile( leading: SizedBox.fromSize( size: const Size(40, 40), child: ClipOval( child: Container( color: Colors.black, ))), title: Text(message['notification']['title']), subtitle: Text(message['notification']['body']), trailing: IconButton( icon: Icon(Icons.close), onPressed: () { OverlaySupportEntry.of(context).dismiss(); }), ), ), ); }, duration: Duration(milliseconds: 4000)); print(message['notification']['title']); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); }, );
Vous pouvez utiliser le package Get pour afficher un snackBar lorsque l'utilisateur reçoit une notification alors que l'application est au premier plan.
_fcm.configure( onMessage: (Map<String, dynamic> message) async { Get.snackbar("message['notification']['title']", snackPosition: SnackPosition.TOP,); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); }, );
Le paramètre 'snackPosition' permet d'afficher le snackBar en haut, donc d'apparaître comme un message d'alerte.
Il y a une bonne explication sur la façon d'utiliser le package flutter_local_notifications en conjonction avec FCM ici