You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:30:05