我正在尝试在单击推送通知时打开特定屏幕,我的有效负载如下所示:
var payload = {
notification: {
title: notificationTitle,
body: notificationMessage,
click_action:"/screena",sound:"default",
}
};
我收到通知,但我无法捕捉通知点击事件,如何捕捉它。我正在使用 flutter 消息传递
https://github.com/flutter/plugins/tree/master/packages/firebase_messaging
我的 firebase 推送消息服务代码如下所示
pushMessagingService() async{
messagingreference.configure(
onMessage: (Map<String, dynamic> message) {
print("I am here in on message");
print(message);
},
onLaunch: (Map<String, dynamic> message) {
print("I am here onLaunch");
print(message);
},
onResume: (Map<String, dynamic> message) {
print("I am hereonResume");
print(message);
},
);
messagingreference.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
messagingreference.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
messagingreference.getToken().then((String token) async {
print(token);
});
}
在这里,当我的应用程序在前台时,我可以收到 @xqwzts 在消息中所说的消息,但我的问题是如何从系统托盘中出现的推送通知中捕获点击事件并导航到所需的屏幕。
最佳答案
这里有几件事:
1- click_action
必须设置为 "FLUTTER_NOTIFICATION_CLICK"
2- click_action
必须在有效负载的 data
部分中设置
DATA='{
"notification": {
"body": "this is a body",
"title": "this is a title",
},
"data": {
"click_action": "FLUTTER_NOTIFICATION_CLICK",
"sound": "default",
"status": "done",
"screen": "screenA",
},
"to": "<FCM TOKEN>"
}'
这应该允许您在 Flutter 应用的 onMessage
处理程序中接收消息。
您可以从那里调用 Navigator.of(context).pushNamed(message['screen'])
。
如果此时您没有 BuildContext
,您可以将 GlobalKey
注册为 的
,并使用它通过 navigatorKey
属性MaterialAppGlobalKey.currentState
Navigator
https://stackoverflow.com/questions/48403786/
相关文章:
Flutter - 如何更改 TextField 提示颜色?
dart - Flutter:是否有可能创建 App Widgets (Android) 和 Tod
flutter - Scoped Model、BLoC 模式、StreamBuilder 和 Inh
flutter - 单击屏幕上的文本字段/任何位置后,如何在 flutter 上隐藏软输入键盘?
dart - 将带参数的函数传递给 VoidCallback
mobile - 是否可以在 Linux 虚拟机上使用 Flutter 开发 iOS 应用程序?
dart - 如何在 ListView 内 flutter 中创建一行可滚动的文本框或小部件?