Flutter FirebaseMessaging发送通知报错:Null无法转为Object类型
问题原因排查
1. 强制非空断言引发的空值类型错误
你的sendNotificationToUser函数中,title和body参数定义为String?(可空字符串),但在构建FCM消息的data字段时,使用了title!和body!强制断言它们不为空。如果调用该函数时传入的title或body实际为null,就会触发type 'Null' is not a subtype of type 'Object'的错误——因为FCM要求data中的所有值必须是非空的Object类型,空值被强制转换为非空类型后,会直接触发类型不匹配异常。
2. 冗余的await调用(潜在问题)
代码中String? friendFcmToken = await friendSnapshot['token_push'];这一行存在错误:friendSnapshot['token_push']返回的是同步值(并非Future),不需要添加await,这会导致编译警告,建议修正为:
String? friendFcmToken = friendSnapshot['token_push'] as String?;
修复方案
针对核心报错,你需要处理title和body的空值场景,两种可选方式:
- 确保调用
sendNotificationToUser时,始终传入非空的title和body; - 在函数内部添加空值兜底逻辑,给默认值:
await _firebaseMessaging.sendMessage( to: friendFcmToken, data: { 'title': title ?? '新消息', 'body': body ?? '您收到一条新消息', }, );
这样即使title或body为null,也会用默认值填充,避免强制非空带来的类型错误。
内容的提问来源于stack exchange,提问作者Yellow_Ananas
相关产品推荐
相关产品推荐

