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
相关产品推荐
相关产品推荐

