flutter_local_notifications中Darwin/IOSNotificationDetails均无法使用求助
解决flutter_local_notifications与firebase_messaging集成的推送问题
问题根源分析
你的问题主要来自两个核心点:
- 版本兼容冲突:flutter_local_notifications 12.0.4要求Flutter版本至少为3.7.0,而你当前使用的Flutter 3.3.9不满足该最低要求,导致Darwin系列类(
DarwinInitializationSettings、DarwinNotificationDetails)无法被正常识别。 - API参数变更:flutter_local_notifications 10.x及以上版本已将iOS相关配置的参数名从
iOS改为darwin,同时IOSNotificationDetails已被废弃并替换为DarwinNotificationDetails,旧代码写法不符合新版本规范。
解决方案
方案一:升级Flutter版本(推荐)
- 执行命令将Flutter升级到稳定版(确保版本≥3.7.0):
flutter upgrade
- 清理并重新安装依赖:
flutter clean && flutter pub get
- 修改代码适配新版本API:
final android = AndroidInitializationSettings('@mipmap/ic_launcher'); final darwin = DarwinInitializationSettings(); final initSettings = InitializationSettings( android: android, darwin: darwin, // 参数名从iOS改为darwin ); flutterLocalNotificationsPlugin.initialize(initSettings); FirebaseMessaging.onMessage.listen((RemoteMessage message) async { print('......message: ${message.notification?.title}--${message.notification?.body}'); BigTextStyleInformation bigTextStyleInformation = BigTextStyleInformation( message.notification!.body.toString(), htmlFormatBigText: true, contentTitle: message.notification!.title.toString(), htmlFormatContentTitle: true, ); AndroidNotificationDetails androidPlatformChannelSpecitics = AndroidNotificationDetails( 'dbfood', 'dbfood', importance: Importance.high, styleInformation: bigTextStyleInformation, priority: Priority.high, playSound: true, ); NotificationDetails platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecitics, darwin: DarwinNotificationDetails(), // 参数名从iOS改为darwin ); await flutterLocalNotificationsPlugin.show( 0, message.notification?.title, message.notification?.body, platformChannelSpecifics, payload: message.data['body'], ); });
- 重新运行项目验证推送功能。
方案二:降级flutter_local_notifications版本(仅当无法升级Flutter时使用)
如果无法升级Flutter,可将flutter_local_notifications降级到兼容Flutter 3.3.9的版本(如10.5.0,支持Flutter ≥2.5.0):
- 修改
pubspec.yaml中的依赖配置:
flutter_local_notifications: ^10.5.0
- 清理并重新安装依赖:
flutter clean && rm pubspec.lock && flutter pub get
- 适配降级后的API(10.x版本参数名仍为
iOS):
final android = AndroidInitializationSettings('@mipmap/ic_launcher'); final ios = DarwinInitializationSettings(); final initSettings = InitializationSettings(android: android, iOS: ios); flutterLocalNotificationsPlugin.initialize(initSettings); // 通知发送部分保持参数名iOS不变 NotificationDetails platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecitics, iOS: DarwinNotificationDetails(), );
内容的提问来源于stack exchange,提问作者chaowen
相关产品推荐
相关产品推荐

