颤动本地通知“一天中的小时,以 24 小时制 [0..23] 表示。”

Posted

技术标签:

【中文标题】颤动本地通知“一天中的小时,以 24 小时制 [0..23] 表示。”【英文标题】:flutter local notification "The hour of the day, expressed as in a 24-hour clock [0..23]." 【发布时间】:2021-10-06 23:57:27 【问题描述】:

我正在使用颤振本地通知,我想了解它的时间。在颤振本地通知中使用的代码文件 date_time.dart 中,我发现:

"The hour of the day, expressed as in a 24-hour clock [0..23]."

这意味着我需要在上午 8 点创建通知,我应该输入代码 07。 但是flutter本地通知的例子,通知的意思是在上午10点,但是在他们写的代码中是10。这意味着范围是[1..24],不是吗? 调度示例代码为:

  Future<void> _scheduleDailyTenAMNotification() async 
    await flutterLocalNotificationsPlugin.zonedSchedule(
        0,
        'daily scheduled notification title',
        'daily scheduled notification body',
        _nextInstanceOfTenAM(),
        const NotificationDetails(
          android: AndroidNotificationDetails(
              'daily notification channel id',
              'daily notification channel name',
              'daily notification description'),
        ),
        androidAllowWhileIdle: true,
        uiLocalNotificationDateInterpretation:
            UILocalNotificationDateInterpretation.absoluteTime,
        matchDateTimeComponents: DateTimeComponents.time);
  

  tz.TZDateTime _nextInstanceOfTenAM() 
    final tz.TZDateTime now = tz.TZDateTime.now(tz.local);
    tz.TZDateTime scheduledDate =
        tz.TZDateTime(tz.local, now.year, now.month, now.day, 10);
    if (scheduledDate.isBefore(now)) 
      scheduledDate = scheduledDate.add(const Duration(days: 1));
    
    return scheduledDate;
  

【问题讨论】:

23 是晚上 11:00。所以 20 将是​​ 8:00 PM,这反过来意味着 16 将是 4:00 PM,12 将是 12:00 PM。同样 10 是 10:00 AM 。因此,对于 8,您有 8:00 AM 作为答案。这里的 0 代表 00:00 AM 请将此评论作为批准它的答案,谢谢@KrishBhanushali 【参考方案1】:

在这里,通过在 [0..23] 范围内的参数上传递 10 来获取上午 10 点的下一个实例

  tz.TZDateTime _nextInstanceOfTenAM() 
    final tz.TZDateTime now = tz.TZDateTime.now(tz.local);
    tz.TZDateTime scheduledDate =
        tz.TZDateTime(tz.local, now.year, now.month, now.day, 10); //here 10 is for 10:00 AM
    if (scheduledDate.isBefore(now)) 
      scheduledDate = scheduledDate.add(const Duration(days: 1));
    
    return scheduledDate;
  

因为这些值对应于 24 小时格式。 0 表示 00:00。 23 代表 23:00,即 12:00 AM 和 11:00 PM。

因此,要在下一个上午 8:00 进行设置,您需要传递 8。这意味着 24 小时制的 8:00 和 12 小时制的上午 8:00。

【讨论】:

以上是关于颤动本地通知“一天中的小时,以 24 小时制 [0..23] 表示。”的主要内容,如果未能解决你的问题,请参考以下文章

由GPS位置触发的颤动本地通知

颤动本地通知发送带有有效负载选项的 ID

在颤动中显示通知的最简单方法?

如何在前台接收推送通知时显示颤振本地通知?

启用或禁用通知颤动

如何在颤动中允许浮动通知和锁定屏幕通知编程