Flutter如何实现指定日期时间触发本地定时通知?
现有代码问题点
- 你当前调用的
notificationsPlugin.show()是立即发送通知的API,无法实现定时触发效果,定时通知需要调用zonedSchedule()方法 - 缺少将用户选择的DateTime转换为时区包支持的TZDateTime类型的逻辑
- 未配置Android高版本、iOS的通知权限申请逻辑
- 现有代码存在语法错误:
displayNot方法缺少闭合大括号
实现步骤
1. 补充权限配置
Android端
在android/app/src/main/AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
iOS端
修改初始化iOS设置的代码,主动申请通知权限:
var initIOS = IOSInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, );
2. 改写定时通知触发方法
把原来的displayNot方法改成用zonedSchedule实现的版本:
Future<void> displayNot(String postBaslik, DateTime postZaman) async { // 将用户选择的本地DateTime转为TZDateTime final location = tz.getLocation(tz.local.name); final scheduledDate = tz.TZDateTime.from(postZaman, location); var androidDetails = AndroidNotificationDetails( "channelId", "channelName", "channelDescription", importance: Importance.high ); var iosDetails = IOSNotificationDetails(); var generalNotificationDetails = NotificationDetails(android: androidDetails, iOS: iosDetails); await notificationsPlugin.zonedSchedule( 0, // 多个不同定时提醒要设置不同ID,否则会互相覆盖 postBaslik, "自定义通知正文内容", scheduledDate, generalNotificationDetails, androidAllowWhileIdle: true, // 低功耗模式下也可触发通知 uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, ); }
3. 补充语法闭合
给原displayNot方法补上缺失的闭合大括号即可正常运行。
内容的提问来源于stack exchange,提问作者Berke Ay
相关产品推荐
相关产品推荐

