Flutter使用flutter_local_notifications 13.0.0时回调类型不匹配报错求助
解决flutter_local_notifications ^13.0.0的回调参数类型不匹配问题
错误核心原因是版本升级后,onDidReceiveNotificationResponse的回调签名发生了变更,你的onSelectNotification方法签名和新版本要求不匹配:
- 旧版本回调直接接收
String? payload,返回Future<void> - 13.0.0版本要求回调接收
NotificationResponse对象,返回void
修改步骤:
- 更新
onSelectNotification方法签名
将原来的异步方法改为同步方法,参数替换为NotificationResponse,从该对象中提取payload:
void onSelectNotification(NotificationResponse response) { final String? payload = response.payload; print('payload $payload'); if (payload != null && payload.isNotEmpty) { onNotificationClick.add(payload); } }
如果需要在回调内执行异步操作,可在方法内部用async包裹逻辑,但方法本身返回值保持void:
void onSelectNotification(NotificationResponse response) async { final String? payload = response.payload; print('payload $payload'); if (payload != null && payload.isNotEmpty) { // 这里可执行异步操作,比如导航、网络请求等 await someAsyncFunction(); onNotificationClick.add(payload); } }
- 修正
initialize方法中的回调绑定
现在onDidReceiveNotificationResponse可以直接绑定修改后的onSelectNotification,类型匹配后错误会消失:
await _localNotificationService.initialize( settings, onDidReceiveNotificationResponse: onSelectNotification, );
额外iOS适配提示
onDidReceiveLocalNotification在新版本中已被标记为废弃,建议统一使用onDidReceiveNotificationResponse处理所有通知回调,避免后续版本兼容性问题。
内容的提问来源于stack exchange,提问作者Programmer2B
相关产品推荐
相关产品推荐

