我正在使用flutter_local_notifications包,并试图实现一个通知系统,我每天在不同的时间收到通知.

例如,有一天我可能在早上6:00收到通知,第二天在晚上7:00收到通知,第二天在上午8:30或下午4:00收到通知.但是,每天都会有通知.

我try 过使用定期通知和从flutter_local_notifications开始的计划通知,但我很难理解如何实现这一点.

这是我的通知代码

class LocalNotifications {
  static final FlutterLocalNotificationsPlugin
      _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
  static final onClickNotification = BehaviorSubject<String>();


  static void onNotificationTap(NotificationResponse notificationResponse) {
    onClickNotification.add(notificationResponse.payload!);
  }


  static Future init() async {
    const AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings('@mipmap/ic_launcher');
    final DarwinInitializationSettings initializationSettingsDarwin =
        DarwinInitializationSettings(
      onDidReceiveLocalNotification: (id, title, body, payload) => null,
    );
    final LinuxInitializationSettings initializationSettingsLinux =
        LinuxInitializationSettings(defaultActionName: 'Open notification');
    final InitializationSettings initializationSettings =
        InitializationSettings(
            android: initializationSettingsAndroid,
            iOS: initializationSettingsDarwin,
            linux: initializationSettingsLinux);
    _flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onDidReceiveNotificationResponse: onNotificationTap,
        onDidReceiveBackgroundNotificationResponse: onNotificationTap);
  }
  static Future showPeriodicNotifications({
    required String title,
    required String body,
    required String payload,
  }) async {
    const AndroidNotificationDetails androidNotificationDetails =
        AndroidNotificationDetails('channel 2', 'your channel name',
            channelDescription: 'your channel description',
            importance: Importance.max,
            priority: Priority.high,
            ticker: 'ticker');
    const NotificationDetails notificationDetails =
        NotificationDetails(android: androidNotificationDetails);
    await _flutterLocalNotificationsPlugin.periodicallyShow(
      1,
      title,
      body,
      RepeatInterval.everyMinute,
      notificationDetails,
      payload: payload,
      androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
    );
  }


  static Future showScheduleNotification({
    required int id,
    required String title,
    required String body,
    required String primeTimes,
    required String payload,
  }) async {
    tz.initializeTimeZones();

    tz.TZDateTime payloadDateTime = tz.TZDateTime.parse(tz.local, primeTimes);

  
    await _flutterLocalNotificationsPlugin.zonedSchedule(
        id,
        title,
        body,
        payloadDateTime,
        const NotificationDetails(
            android: AndroidNotificationDetails(
          'channel 3',
          'your channel name',
          channelDescription: 'your channel description',
          importance: Importance.max,
          priority: Priority.high,
          ticker: 'ticker',
          styleInformation: BigTextStyleInformation(''),
        )),
        androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
        
        uiLocalNotificationDateInterpretation:
            UILocalNotificationDateInterpretation.absoluteTime,
        payload: payload, 
        
        );
  }

}

推荐答案

您需要在zonedSchedule中传递一个带有值的参数,才能在每天的给定时间获得计划的通知.

matchDateTimeComponents: DateTimeComponents.time

根据包裹,它说,

如果给出了matchDateTimeComponents参数的值,则说明 该插件用于计划与 指定的日期和时间组件.指定DateTimeComponents.time 会导致每天都会通知,同时 DateTimeComponents.day OfWeekAndTime将生成每周 在一周的同一天和同一时间发生的通知.这是 类似于iOS/MacOS上的循环通知如何使用 日历触发器.请注意,当给定值时,计划日期 可能不代表通知将第一次显示.一个 例如,如果日期和时间当前为2020-10-19 11:00 (即2020年10月19日上午11:00),计划日期为2020-10-21 10:00 而matchDateTimeComponents的值为 DateTimeComponents.time,则下次显示通知的时间 是2020年10月20日10:00.

Flutter相关问答推荐

具有可变高度小部件的SingleChildScrollView内的列

如何使用Firebase Firestore来获取外部集合中的文档子集合中的文档

如果文档确实存在,则FiRestore将";False";返回到";if-Document-Existes";...还是我说错了?

使用GO_ROUTER在模式内导航

如何在Ffltter 3.16中设置标准的提升按钮主题?

如何画三角形的圆角?

在Dart中使用Riverpod代码生成时出现问题(addListener)

Riverpod Provider.family 和 HookConsumerWidget 不刷新 UI

Supabase Auth:重定向到 Google.com 而不是我的应用程序

自定义绘画未显示 - Flutter

reactive_flutter_BLE - 应用找到设备但无法连接(并读取 BLE 数据)

Flutter:如何从运行时创建的列表中访问单个子部件的值

Paypal 支付网关添加带有 magento 2 网络详细信息用户名、密码、签名 Magento 2 的 flutter 应用程序?

如何显示从 MariaDB 获取的数据到列表视图

Flutter/Dart 返回_Future的实例而不是实际的字符串值

如何修复int类型不是String类型的子类型

我可以使用 Future 来填充Text() 小部件而不是在 Flutter 中使用 FutureBuilder 吗?

type '_InternalLinkedHashMap' 不是使用 http 包的'String' 类型的子类型

try 为两个下拉值添加共享首选项,但在 Flutter 上显示错误断言失败:?

Flutter:如何将 AssetImage 转换为 Unit8List?