#push-notification #flutter #firebase-cloud-messaging
#push-уведомление #flutter #firebase-облако-обмен сообщениями
Вопрос:
Чего я пытаюсь достичь в своем приложении, так это того, что когда пользователь получает push-уведомление, приложение отправляет новый виджет. Я правильно получаю данные уведомления, но не могу заставить его работать.
Это прослушиватель уведомлений
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print('on message $message');
_manageNotificationData(message);
},
onResume: (Map<String, dynamic> message) async {
print('on resume $message');
_manageNotificationData(message);
},
onLaunch: (Map<String, dynamic> message) async {
print('on launch $message');
_manageNotificationData(message);
},
);
Моя полезная нагрузка
data: {
"id" : "Id for notification state",
"click_action": "FLUTTER_NOTIFICATION_CLICK","
"orderId": "SomeId"
}
void _manageNotificationData(Map<String,dynamic> message){
//When the user receives a notification, a new widget will appear so that he can rate another user
if(message["id"] == 1){
//This data is printed in the console
print(message["orderId"]);
//this is not working
Navigator.push(
context,
MaterialPageRoute(builder: (context) =>
RateProfessionalWidget(
orderId: message["orderId"])
),
);
}
}
Я думаю, это не сработает, потому что я вызываю Navigator.push в главном файле, но в этом файле единственное место, где у меня есть доступ к данным уведомления. Как я могу заставить это работать?
Ответ №1:
Убедитесь, что ваше приложение (то, что вы runApp()
) является StatefulWidget
, и в его состоянии создайте GlobalKey
GlobalKey<NavigatorState> navigatorKey =
GlobalKey<NavigatorState>(debugLabel: 'navKey');
При создании MaterialApp
передайте ему ключ
child: MaterialApp(
navigatorKey: navigatorKey,
Теперь в вашем приложении вы можете использовать navigatorKey.currentState.push()
etc