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

如何使用awesome_notifications在后台每日16:00调度本地通知?

当前本地通知实现

依赖配置

awesome_notifications: ^0.6.21

通知服务类

class NotificationService {
  sendNotification(){
    AwesomeNotifications().isNotificationAllowed().then((isAllowed){
      if(!isAllowed){
        AwesomeNotifications().requestPermissionToSendNotifications();
      }
    });
    AwesomeNotifications().createNotification(content: NotificationContent(id: 2, channelKey: 'key',
    title: 'Title',
      body: 'Body',
    ),
    );
    AwesomeNotifications().actionStream.listen((event) {
      Get.toNamed(Routes.HOME_PAGE);
    });
  }
}

主函数初始化

void main() {
  AwesomeNotifications().initialize(null, [NotificationChannel(channelKey: 'key', channelName: 'channelName', channelDescription: 'channelDescription')]);
  runApp(const MyApp());
}

问题

如何实现每日下午4点在后台调度该本地通知?


实现每日下午4点重复调度通知的方案

直接利用awesome_notifications的调度通知功能即可,无需额外依赖后台任务插件,核心是通过schedule参数配置重复触发规则:

1. 修改NotificationService的调度方法

将原有的sendNotification替换为支持每日重复的调度方法:

class NotificationService {
  // 调度每日下午4点的重复通知
  Future<void> scheduleDailyNotification() async {
    // 检查并申请通知权限
    bool isAllowed = await AwesomeNotifications().isNotificationAllowed();
    if (!isAllowed) {
      await AwesomeNotifications().requestPermissionToSendNotifications();
    }

    // 创建每日重复的调度通知
    await AwesomeNotifications().createNotification(
      content: NotificationContent(
        id: 2,
        channelKey: 'key',
        title: '每日提醒',
        body: '这是下午4点的定时通知',
      ),
      schedule: NotificationCalendar(
        hour: 16, // 下午4点(24小时制)
        minute: 0,
        second: 0,
        repeats: true, // 开启每日重复
        allowWhileIdle: true, // 允许设备休眠时触发
        preciseAlarm: true, // Android 12+需要高精度触发权限
      ),
    );

    // 保留通知点击跳转逻辑
    AwesomeNotifications().actionStream.listen((event) {
      Get.toNamed(Routes.HOME_PAGE);
    });
  }
}

2. 在App启动时触发调度

修改主函数,确保App启动时完成调度设置:

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 确保Flutter初始化完成
  await AwesomeNotifications().initialize(
    null,
    [
      NotificationChannel(
        channelKey: 'key',
        channelName: 'channelName',
        channelDescription: 'channelDescription',
        importance: NotificationImportance.High, // 提高优先级确保后台触发
        enableVibration: true,
      )
    ],
  );

  // 启动时调度每日通知
  await NotificationService().scheduleDailyNotification();
  
  runApp(const MyApp());
}

关键注意事项

  • Android权限配置:Android 12及以上需在AndroidManifest.xml中添加高精度闹钟权限:
    <uses-permission android:name="android.permission.USE_EXACT_ALARM" />
    
    Android 13+还需添加通知权限:
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
  • 取消调度:若需停止每日通知,可调用AwesomeNotifications().cancel(2)(根据通知ID取消)。
  • 时区适配:默认使用设备本地时区,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:05:15