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

Flutter如何实现不点击运行main.dart也能按指定时间触发本地通知

Flutter 定时本地通知自动触发调整方案

核心原因

你当前的实现仅在应用启动运行时做了一次性时间匹配触发,没有把定时通知任务注册到系统的通知调度队列,因此只有刚好在目标时间点运行应用才会触发通知。

具体调整步骤

  • 第一步:完成基础权限配置
    安卓端需在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.USE_EXACT_ALARM" />
    
    iOS端需在Info.plist添加通知权限申请:
    <key>NSUserNotificationUsageDescription</key>
    <string>需要通知权限向您发送定时提醒</string>
    
  • 第二步:使用zonedSchedule方法注册定时任务
    不要用单次的show方法触发通知,配合timezone包处理时区偏移,将定时任务注册到系统调度队列,核心代码示例:
    import 'package:flutter_local_notifications/flutter_local_notifications.dart';
    import 'package:timezone/data/latest_all.dart' as tz;
    import 'package:timezone/timezone.dart' as tz;
    
    // 应用启动时先初始化通知和时区配置
    void initNotification() async {
      tz.initializeTimeZones();
      final FlutterLocalNotificationsPlugin notifyPlugin = FlutterLocalNotificationsPlugin();
      // 安卓、iOS端的基础初始化配置按官方要求完成即可,此处省略
    
      // 注册用户指定时间的定时通知
      await notifyPlugin.zonedSchedule(
        1001, // 通知唯一ID,不同定时任务要用不同ID
        '定时通知标题',
        '定时通知内容',
        // 将用户选择的DateTime转换为本地时区时间
        tz.TZDateTime.from(userSelectedDateTime, tz.local),
        const NotificationDetails(
          android: AndroidNotificationDetails(
            'timely_notify_channel',
            '定时提醒',
            channelDescription: '用于发送定时提醒通知',
            importance: Importance.max,
            priority: Priority.high,
          ),
        ),
        // 应用处于空闲/后台状态也允许触发通知
        androidAllowWhileIdle: true,
        uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime,
      );
    }
    
  • 第三步:在用户设置定时时间时调用注册逻辑即可
    只要成功调用一次zonedSchedule,系统就会留存该定时任务,即使应用完全退出也会在指定时间自动触发通知,无需保持应用运行,也不需要在目标时间点手动启动应用。

注意事项

  • 安卓部分定制ROM(小米、华为、vivo等)有后台进程限制,需引导用户手动打开应用的自启动、后台活动权限,避免应用被系统杀死后定时任务失效
  • 同一通知ID重复调用注册方法会覆盖原有任务,如需取消指定定时通知,调用notifyPlugin.cancel(通知ID)即可

内容的提问来源于stack exchange,提问作者Katya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03