android - 如何在单击推送通知时打开特定屏幕以进行 flutter

我正在尝试在单击推送通知时打开特定屏幕,我的有效负载如下所示:

 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 属性MaterialApp,并使用它通过 GlobalKey.currentState

全局访问您的 Navigator

https://stackoverflow.com/questions/48403786/

相关文章:

Flutter - 如何更改 TextField 提示颜色?

dart - 从 Flutter 记录大字符串

dart - Flutter:是否有可能创建 App Widgets (Android) 和 Tod

flutter - Scoped Model、BLoC 模式、StreamBuilder 和 Inh

flutter - 单击屏幕上的文本字段/任何位置后,如何在 flutter 上隐藏软输入键盘?

dart - 将带参数的函数传递给 VoidCallback

mobile - 是否可以在 Linux 虚拟机上使用 Flutter 开发 iOS 应用程序?

dart - 如何在 ListView 内 flutter 中创建一行可滚动的文本框或小部件?

flutter - 如何为 flutter 添加自定义颜色?

dart - 如何在 Flutter 中调度后台任务?