Flutter使用flutter_local_notifications定时触发通知失败求助
flutter_local_notifications定时通知不触发排查方案
1. 先修复现有代码语法错误
你提供的代码存在多处语法不闭合、多余符号的问题,先修正如下:
tz.TZDateTime _nextInstanceOf423PM() { final tz.TZDateTime now = tz.TZDateTime.now(tz.local); tz.TZDateTime scheduledDate = tz.TZDateTime(tz.local, now.year, now.month, now.day, 16, 23); // 去掉多余的右括号 if (scheduledDate.isBefore(now)) { scheduledDate = scheduledDate.add(const Duration(days: 1)); } return scheduledDate; } // 补充函数闭合大括号 Future<void> displayNotification() async { await notificationsPlugin.zonedSchedule( 0, "Wake Up", 'Time to wake up now', _nextInstanceOf423PM(), NotificationDetails( android: AndroidNotificationDetails( 'channel_id', 'channel_name', 'channel_description'), // 建议通道ID不要带空格,避免异常 ), uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, androidAllowWhileIdle: true, matchDateTimeComponents: DateTimeComponents.time, // 如果需要每天同一时间重复触发,必须加这个参数 ); // 补充方法闭合括号 } // 补充函数闭合大括号
2. 检查时区初始化配置
定时通知依赖时区库的正确初始化,必须在应用启动时完成如下配置:
- 入口main函数中要初始化时区绑定,获取本地时区:
import 'package:timezone/data/latest_all.dart' as tz; import 'package:timezone/timezone.dart' as tz; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化时区数据 tz.initializeTimeZones(); // 设置本地时区 tz.setLocalLocation(tz.getLocation(await FlutterNativeTimezone.getLocationName())); // 后续初始化notification插件等逻辑 runApp(const MyApp()); }
注意:需要额外安装flutter_native_timezone包获取设备真实本地时区,直接用tz.local可能出现时区偏移错误
3. 检查Android端权限配置
- Android 13(API 33)及以上版本必须申请
POST_NOTIFICATIONS权限,没有通知权限无法弹出通知 - Android 12(API 31)及以上版本要触发精确时间的定时通知,必须申请
SCHEDULE_EXACT_ALARM权限,需要在AndroidManifest.xml中添加如下声明:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!-- 如果需要设备重启后仍保留定时通知,加这个权限 -->
- 首次创建通知通道后,如果修改了通道的优先级、声音等配置,需要卸载重装应用才会生效,测试时可以先更换通道ID验证。
4. 测试验证方法
可以先把定时时间改成当前时间之后1~2分钟,直接运行测试,不要用热重载,热重载不会重新注册定时任务。
内容的提问来源于stack exchange,提问作者Shashwat Singh
相关产品推荐
相关产品推荐

