You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用FirebaseMessaging时RemoteMessage转Map<String,dynamic>报错如何解决

问题解决方法

报错原因

你定义的getRideRequestId方法要求入参是Map<String, dynamic>类型,但调用时传入的是Firebase Messaging返回的RemoteMessage类型实例,类型不匹配触发了编译报错。

修复方案

可任选以下任意一种方式修复:

方案1:修改方法入参类型(更推荐)

直接把getRideRequestId的入参调整为RemoteMessage类型,内部直接读取官方提供的data属性即可,符合FlutterFire的使用规范:

String getRideRequestId(RemoteMessage message){
  String rideRequestId="";
  if(Platform.isAndroid){
    rideRequestId = message.data['ride_request_id'];
    print("Print request id::");
    print(rideRequestId);
  }else{
    // 若iOS侧自定义参数存放在其他位置可对应调整取值逻辑
    rideRequestId = message.data['ride_request_id'];
  }
  return rideRequestId;
}

原调用getRideRequestId(message)的代码不需要修改。

方案2:调用时传入符合要求的Map参数

如果不想改动原有getRideRequestId的方法定义,只需要修改调用处的代码,构造符合要求的Map传入即可:

Future initialize(context) async {    
  FirebaseMessaging.onMessageOpenedApp.listen(
        (RemoteMessage message) {
          print("im clicked1");
          if (Platform.isAndroid) {
            getRideRequestId({"data": message.data});
          } else {
            getRideRequestId(message.data);
          }
      },
  );
}

注意事项

RemoteMessage是FlutterFire封装的推送消息实体类,其自带的data属性就是推送时传入的自定义参数字典,本身就是Map<String, dynamic>类型,无需额外做格式转换。

内容的提问来源于stack exchange,提问作者Hassan Quraishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:15:00