la documentation du package firebase_messaging pour Flutter recommande d'appeler la fonction configure le plus tôt possible dans le cycle de vie de l'application. Je comprends pourquoi cela est recommandé. Actuellement, mon application a cette structure, lorsque l'utilisateur ouvre l'application pour la première fois, il accède à «FirstPage», qui décide s'il doit être dirigé vers «LoginPage» ou «MainPageOfApp» s'il est déjà connecté. Pour passer à l'une ou l'autre page, J'utilise PushReplacement donc le contexte de "FirstPage" est parti.
Techniquement, je devrais appeler configure de firebase_messaging dans "FirstPage" car c'est la première chance, mais cela ne fonctionnera pas car je perdrai le contexte de la première page lorsque je naviguerai vers l'une des deux pages suivantes (LoginPage ou MainPage). C'est un problème car je configure firebase_messaging pour accéder à une certaine page lorsqu'une notification est reçue, mais aucun contexte de configuration de firebase_messaging n'a disparu.
Mon autre solution consiste à configurer firebase_messaging dans MainPage mais le problème est que lorsque je reçois une notification lorsque l'application est arrêtée (configuration on_launch), l'application ouvre d'abord MainPage puis accède à la page que la notification lui dit d'ouvrir (effectue ce il a été configuré pour faire dans on_launch). Attendu je suppose.
Mon problème est de savoir comment configurer firebase_messaging dans FirstPage étant donné que je perdrai son contexte puisque j'utiliserai Navigator.pushReplacement pour aller à la page suivante ("LoginPage" ou "MainPage").
Merci!
3 Réponses :
J'ai trouvé une solution. Utilisez: GlobalKey<NavigatorState>
Selon ceci: Comment naviguer sans contexte dans l'application Flutter?
Et passez la clé à votre méthode FirebaseMessaging.configure ().
Ensuite, lorsque le message arrive, le contexte n'est pas là mais vous avez la clé de référence du navigateur et vous pouvez l'utiliser.
void _navigateToItemDetail(Map<String, dynamic> message) { final Item item = _itemForMessage(message); // Clear away dialogs Navigator.popUntil(context, (Route<dynamic> route) => route is PageRoute); if (!item.route.isCurrent) { Navigator.push(context, item.route); } }
J'ai eu ce problème également. il existe un package appelé get: https://pub.dev/packages/get
dans votre main, vous pouvez changer MaterialApp en GetMaterialApp et importer: import 'package: get / get_navigation / get_navigation.dart';
après allez à l'endroit où vous avez: _firebaseMessaging.configure (); puis créez simplement une fonction:
onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); goToNext(); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); goToNext(); },
puis dans _firebaseMessaging.configure (); appeler
goToNext(){ Get.to("The page you want to go to"); }