Еженедельное запланированное повторяющееся уведомление Flutter не работает должным образом

Плагин

Я использую последнюю версию flutter_local_notifications (6.0.0)

Приложение

Я разрабатываю приложение для напоминаний, в котором пользователь может настроить отображение локальных уведомлений каждую неделю в выбранные дни недели с повторением каждые X часов. Уведомление может иметь время начала и окончания. Например, настройка отображения уведомлений каждые SAT,SUN,WED, начиная с 08:30, заканчивая 15:30 и повторяя каждые 2 часа между этими временами (8:30, 10:30, 12:30, 14:30) . Для упрощения настрою уведомление на каждый день недели.

Ошибка

Проблема в том, что иногда это происходит, а иногда не отображаются уведомления. Первое уведомление всегда отображается (8:30 в примере выше), но иногда не отображаются другие. Все уведомления устанавливаю.

Мои характеристики

Я использую последнюю версию плагина (6.0.0). Мой телефон LG V20 с Android 8.0. Версия Flutter - 2.2.0 (доктор флаттера в конце этого выпуска).

Образец кода

Мой код немного сложен. Я могу предоставить полный код, но его сложно понять. Я предоставлю ту часть, которая мне кажется необходимой. Я прокомментировал код, чтобы он был понятен, и использовал приведенный выше пример в качестве данных, переданных этой функции:

        void showNotificationWeekly(
      int id, String title, String body, Reminder reminder) async {
        // Initialize Timezone
    tz.initializeTimeZones();
    final String currentTimeZone =
        await FlutterNativeTimezone.getLocalTimezone();
    print("timezone = $currentTimeZone");
    tz.setLocalLocation(tz.getLocation(currentTimeZone));
    // Initialize Timezone done
    int _notificationId = 0;
    List<int> _notificationIdList = []; // I want to set the IDs in the shared Pref, Thats what this list is for
    /// [weekValues] is an array of 7 bools,  0 to 6 representing each day of week
    /// is this loop, I set all the notification for the days of week that user has selected
    /// in our example we have selected all the days of week, so [weekValues] is array of 7 true booleans.
    for (var i = 0; i < reminder.weekValues.length; i++) { 
      tz.TZDateTime _weekDateTime =
          _getNextDateTime(i + 1, reminder.timeValues);
      tz.TZDateTime _timeEnd = tz.TZDateTime(
        tz.local,
        _weekDateTime.year,
        _weekDateTime.month,
        _weekDateTime.day,
        reminder.timeValues[1][0],
        reminder.timeValues[1][1],
      );
      /// since [weekValues] is all true, the else of this if statement is useless here
      if (reminder.weekValues[i]) {
        /// [timeValues[2][0]] is my repeating hour, this part is complicated but in this example
        /// [timeValues[2][0]] is 2 so the if is true
        if (reminder.timeValues[2][0] > 0) {
          while (_weekDateTime.isBefore(_timeEnd)) {
            /// The output of this print is important and will be provided after this code
            print(
                'if Notification with Id= $_notificationId Succesfully Scheduled at $_weekDateTime');
            await flutterLocalNotificationsPlugin.zonedSchedule(
                _notificationId,
                title,
                body,
                // _temp,
                _weekDateTime.add(Duration(seconds: 1)),
                getPlatformChannelSpecfics(),
                androidAllowWhileIdle: true,
                uiLocalNotificationDateInterpretation:
                    UILocalNotificationDateInterpretation.absoluteTime,
                matchDateTimeComponents: DateTimeComponents.dayOfWeekAndTime);
                /// some incrementall stuff
            _notificationIdList.add(_notificationId);
            _notificationId++;
            /// Adding to the times base of the repeating time
            /// in this example and if the first loop we add 2 hours to 8:30, so the result is 10:30
            _weekDateTime = _weekDateTime.add(
              Duration(
                hours: reminder.timeValues[2][0],
              ),
            );
          }
        } else { // This else can be ignored since we selected all the week days
          tz.TZDateTime _temp = tz.TZDateTime(
            tz.local,
            _weekDateTime.year,
            _weekDateTime.month,
            _weekDateTime.day,
            _weekDateTime.hour,
            _weekDateTime.minute,
            _weekDateTime.second,
            _weekDateTime.millisecond,
            _weekDateTime.microsecond,
          );
          print(
              'else Notification with Id= $_notificationId Scheduled at $_temp');
          _notificationIdList.add(_notificationId);
          await flutterLocalNotificationsPlugin.zonedSchedule(
              _notificationId,
              title,
              body,
              // _temp,
              _temp,
              getPlatformChannelSpecfics(),
              androidAllowWhileIdle: true,
              uiLocalNotificationDateInterpretation:
                  UILocalNotificationDateInterpretation.absoluteTime,
              matchDateTimeComponents: DateTimeComponents.dayOfWeekAndTime);
        }
        _notificationId++;
      }
    }
    await setNotificationIds(_notificationIdList);
  }

Вывод на печать:

      
I/flutter ( 7643): Notification with Id= 0 Succesfuly Scheduled at 2021-05-24 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 1 Succesfuly Scheduled at 2021-05-24 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 2 Succesfuly Scheduled at 2021-05-24 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 3 Succesfuly Scheduled at 2021-05-24 14:30:00.000+0430
I/flutter ( 7643): Notification with Id= 5 Succesfuly Scheduled at 2021-05-25 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 6 Succesfuly Scheduled at 2021-05-25 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 7 Succesfuly Scheduled at 2021-05-25 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 8 Succesfuly Scheduled at 2021-05-25 14:30:00.000+0430
I/flutter ( 7643): Notification with Id= 10 Succesfuly Scheduled at 2021-05-26 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 11 Succesfuly Scheduled at 2021-05-26 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 12 Succesfuly Scheduled at 2021-05-26 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 13 Succesfuly Scheduled at 2021-05-26 14:30:00.000+0430
I/flutter ( 7643): Notification with Id= 15 Succesfuly Scheduled at 2021-05-27 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 16 Succesfuly Scheduled at 2021-05-27 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 17 Succesfuly Scheduled at 2021-05-27 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 18 Succesfuly Scheduled at 2021-05-27 14:30:00.000+0430
I/flutter ( 7643): Notification with Id= 20 Succesfuly Scheduled at 2021-05-28 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 21 Succesfuly Scheduled at 2021-05-28 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 22 Succesfuly Scheduled at 2021-05-28 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 23 Succesfuly Scheduled at 2021-05-28 14:30:00.000+0430
I/flutter ( 7643): Notification with Id= 25 Succesfuly Scheduled at 2021-05-29 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 26 Succesfuly Scheduled at 2021-05-29 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 27 Succesfuly Scheduled at 2021-05-29 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 28 Succesfuly Scheduled at 2021-05-29 14:30:00.000+0430
I/flutter ( 7643): Notification with Id= 30 Succesfuly Scheduled at 2021-05-30 08:30:00.000+0430
I/flutter ( 7643): Notification with Id= 31 Succesfuly Scheduled at 2021-05-30 10:30:00.000+0430
I/flutter ( 7643): Notification with Id= 32 Succesfuly Scheduled at 2021-05-30 12:30:00.000+0430
I/flutter ( 7643): Notification with Id= 33 Succesfuly Scheduled at 2021-05-30 14:30:00.000+0430

Доктор трепетания

      flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 2.2.0, on Microsoft Windows [Version 10.0.19042.985], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[√] Chrome - develop for the web
[!] Android Studio (not installed)
[√] VS Code (version 1.56.2)
[√] Connected device (3 available)

! Doctor found issues in 1 category.

Пожалуйста, помогите мне решить эту проблему. Любая помощь будет оценена по достоинству.

0 ответов

Другие вопросы по тегам