Flutter报错:参数类型RemoteMessage无法赋值给Map<String?, dynamic>参数
错误原因
报错为类型不匹配问题:getRideRequestId方法定义的入参类型为Map<String?, dynamic>,但你在FirebaseMessaging.onMessage和FirebaseMessaging.onMessageOpenedApp回调中传入的是RemoteMessage类型实例,两种类型不兼容触发编译错误。
修复方案
仅需修改pushNotification.dart中的getRideRequestId方法即可,具体修改如下:
- 把方法入参类型从
Map<String?, dynamic>替换为RemoteMessage - 调整内部取值逻辑,从
RemoteMessage的data属性中读取自定义字段
修改后的完整方法代码:
String getRideRequestId(RemoteMessage message) { String rideRequestId = ""; if (Platform.isAndroid) { rideRequestId = message.data['ride_request_id']?.toString() ?? ""; } else { // 新版本FCM跨平台自定义字段均存储在data属性中,iOS端也可直接从data取值 rideRequestId = message.data['ride_request_id']?.toString() ?? ""; // 若你使用旧版本FCM配置,iOS端字段在根路径,可替换为下行代码: // rideRequestId = message['ride_request_id']?.toString() ?? ""; } return rideRequestId; }
修改完成后,原代码第20、25行的调用逻辑无需改动,类型匹配后报错会自动消除。
额外优化提示
- 字段取值时增加
?.toString() ?? ""空安全判断,可避免后台返回空值时触发空异常 - 你
main.dart文件的路由注册代码中存在多余的`enter code here`无效字符,建议删除避免编译问题
内容的提问来源于stack exchange,提问作者J.Koriya
相关产品推荐
相关产品推荐

