Flutter local_notifications 10.0.0版本本地通知失效求助
问题解决步骤
核心原因
你仅声明了FlutterLocalNotificationsPlugin变量但未实例化并完成平台初始化配置,导致调用periodicallyShow时对象为null。同时flutter_local_notifications 10.0.0版本对通知初始化流程有明确要求,必须完成安卓、iOS的平台配置后才能调用通知方法。
完整修复代码
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; // 直接实例化插件对象,避免空引用 FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // 初始化通知服务,建议在App启动时调用(比如main函数或页面initState) Future<void> initNotifications() async { // Android初始化配置:指定通知图标(替换成你项目中的图标资源) const AndroidInitializationSettings androidInitSettings = AndroidInitializationSettings('@mipmap/ic_launcher'); // iOS初始化配置:申请通知权限 const DarwinInitializationSettings iosInitSettings = DarwinInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, ); // 合并平台初始化配置 const InitializationSettings initSettings = InitializationSettings( android: androidInitSettings, iOS: iosInitSettings, ); // 完成插件初始化 await flutterLocalNotificationsPlugin.initialize(initSettings); } // 显示周期通知的方法 Future<void> showNotification() async { // Android渠道配置:10.0.0版本必须明确渠道,否则通知无法正常显示 const AndroidNotificationDetails androidDetails = AndroidNotificationDetails( 'daily_deals_channel', // 唯一渠道ID '每日优惠提醒', // 渠道名称 channelDescription: '推送每日优惠活动的通知渠道', // 渠道描述 importance: Importance.max, priority: Priority.high, ); // iOS通知配置 const DarwinNotificationDetails iosDetails = DarwinNotificationDetails(); // 合并平台通知配置 const NotificationDetails notificationDetails = NotificationDetails( android: androidDetails, iOS: iosDetails, ); // 调用周期通知方法 await flutterLocalNotificationsPlugin.periodicallyShow( 0, // 通知ID 'Hello user,', "Don't miss out on the exciting deals for the day.", RepeatInterval.everyMinute, notificationDetails, androidAllowWhileIdle: true, // 允许设备休眠时触发通知 ); }
额外注意事项
- 调用
showNotification前必须先执行initNotifications,示例如下:@override void initState() { super.initState(); initNotifications().then((_) { showNotification(); }); } - Android端需在
android/app/src/main/res/mipmap或drawable目录放置通知图标,否则会显示系统默认图标。 - iOS端需在
Info.plist中添加权限描述:<key>NSAlertUsageDescription</key> <string>需要发送通知提醒您每日优惠活动</string> <key>NSBadgeUsageDescription</key> <string>需要更新应用角标提醒您有新通知</string> <key>NSSoundUsageDescription</key> <string>需要播放通知声音提醒您</string>
内容的提问来源于stack exchange,提问作者YourDeveloper
相关产品推荐
相关产品推荐

