Flutter使用flutter_local_notifications调用zonedSchedule触发PendingIntent异常
解决Flutter Local Notifications的PendingIntent FLAG异常
问题原因
你的应用目标SDK版本为31+(Android 12及以上),根据Android系统要求,创建PendingIntent时必须指定FLAG_IMMUTABLE或FLAG_MUTABLE标记。而你使用的flutter_local_notifications: ^8.1.1+1版本较旧,未适配该系统要求,导致调用zonedSchedule时抛出异常。
解决方案
1. 升级flutter_local_notifications依赖
将pubspec.yaml中的依赖版本更新至最新稳定版(至少9.0.0以上,推荐最新版):
flutter_local_notifications: ^16.1.0
执行命令更新依赖:
flutter pub get
2. 修改通知初始化配置
在两处初始化AndroidInitializationSettings的地方,添加pendingIntentMutability参数,指定为PendingIntentMutability.immutable(若无需可变PendingIntent,推荐使用该值;若需支持内联回复等功能则用mutable):
(1)NotificationsHelper.dart的init方法
static Future<void> init() async { final AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('app_icon', pendingIntentMutability: PendingIntentMutability.immutable); final IOSInitializationSettings initializationSettingsIOS = IOSInitializationSettings(); final InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS); await flutterLocalNotificationsPlugin.initialize(initializationSettings); }
(2)main.dart中的初始化代码
final initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher', pendingIntentMutability: PendingIntentMutability.immutable); final InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, ); await flutterLocalNotificationsPlugin.initialize( initializationSettings, );
3. 确认targetSdkVersion配置(可选)
确保app/build.gradle中的targetSdkVersion为31或更高,若使用Flutter默认配置,可手动指定:
defaultConfig { // ...其他配置 targetSdkVersion 33 }
4. 清理并重新运行项目
执行以下命令清理缓存后重新运行:
flutter clean flutter run
内容的提问来源于stack exchange,提问作者user25249108
相关产品推荐
相关产品推荐

