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

如何在Flutter中实现点击按钮1小时后触发本地通知?

Flutter 延迟1小时触发本地通知实现方案

你使用的flutter_local_notifications: ^8.2.0版本完全支持该需求,核心通过插件的延迟调度通知能力实现,具体实现步骤如下:

前置准备

  • 在pubspec.yaml中添加所需依赖:
dependencies:
  flutter_local_notifications: ^8.2.0
  timezone: ^0.9.0
  • 完成插件平台侧基础配置:
    • 安卓端配置通知渠道、申请通知权限
    • iOS端开启通知相关Capability、申请通知推送权限

核心实现逻辑

  1. 初始化插件与时区配置(建议放在应用启动阶段或页面初始化阶段执行):
// 导入依赖包
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;

// 全局初始化通知插件实例
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

Future<void> initNotification() async {
  // 初始化时区数据,保证时间计算适配系统本地时区
  tz.initializeTimeZones();
  // 安卓端初始化配置,参数替换为你自己的应用图标资源名
  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher');
  // iOS端初始化配置
  const IOSInitializationSettings initializationSettingsIOS =
      IOSInitializationSettings();
  const InitializationSettings initializationSettings = InitializationSettings(
    android: initializationSettingsAndroid,
    iOS: initializationSettingsIOS,
  );
  await flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
  1. 按钮点击事件中添加1小时延迟通知调度逻辑:
Future<void> scheduleOneHourDelayedNotification() async {
  // 计算当前时间加1小时的触发时间点
  final triggerTime = tz.TZDateTime.now(tz.local).add(const Duration(hours: 1));
  
  // 安卓通知配置,channelId需和你预先创建的通知渠道ID一致
  const AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails(
    'delayed_notify_channel',
    '延迟通知渠道',
    channelDescription: '用于发送1小时后触发的延迟通知',
    importance: Importance.max,
    priority: Priority.high,
  );
  const IOSNotificationDetails iosNotificationDetails = IOSNotificationDetails();
  const NotificationDetails notificationDetails = NotificationDetails(
    android: androidNotificationDetails,
    iOS: iosNotificationDetails,
  );
  
  // 提交延迟通知调度任务
  await flutterLocalNotificationsPlugin.zonedSchedule(
    1001, // 通知唯一ID,后续取消通知时需传入该ID
    '通知标题', // 替换为实际需要展示的通知标题
    '1小时到了,请注意查看', // 替换为实际需要展示的通知内容
    triggerTime,
    notificationDetails,
    androidAllowWhileIdle: true, // 安卓低电量空闲模式下也允许触发通知
    uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime,
  );
}

注意事项

  • 每个调度的通知需要使用唯一ID,若需要取消未触发的延迟通知,调用flutterLocalNotificationsPlugin.cancel(1001)传入对应通知ID即可
  • 安卓13及以上系统需要动态申请POST_NOTIFICATIONS权限,否则通知无法正常展示
  • 若应用被用户手动强制杀死,部分定制安卓系统会禁止后台任务触发,属于系统权限限制,和插件逻辑无关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:09:03