Как пропустить одно повторяющееся уведомление с локальными уведомлениями Flutter?IOS

Программируем под IOS
Ответить
Anonymous
 Как пропустить одно повторяющееся уведомление с локальными уведомлениями Flutter?

Сообщение Anonymous »

Я использую локальные уведомления Flutter, чтобы отправлять напоминание пользователям каждый день по своему выбору. Моя функция расписания в моей службе уведомлений выглядит следующим образом: < /p>

Код: Выделить всё

  Future scheduleDailyNotification(
DateTime setTime, String title, String body, String payload) async {
// Setup notification details
const DarwinNotificationDetails iosNotificationDetails =
DarwinNotificationDetails(presentAlert: true, presentSound: true);
const NotificationDetails notificationDetails =
NotificationDetails(iOS: iosNotificationDetails);

// Convert to TZDateTime
final tz.TZDateTime scheduledDate = tz.TZDateTime(
tz.local,
setTime.year,
setTime.month,
setTime.day,
setTime.hour,
setTime.minute,
setTime.second,
);

logger.d('Scheduling notification for: $scheduledDate');
// Schedule notification
await _flutterLocalNotificationsPlugin.zonedSchedule(
0, title, body, scheduledDate, notificationDetails,
payload: payload,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
matchDateTimeComponents: DateTimeComponents.time);
}
< /code>
Теперь это напоминание должно быть отправлено только в том случае, если пользователь не предпринял конкретного действия в приложении. Если пользователь предпринимает это действие, я хочу отменить сегодняшнее уведомление, но завтра начните отправлять уведомления снова: < /p>
  Future cancelTodaysNotification() async {
final tz.TZDateTime now = tz.TZDateTime.now(tz.local);
DateTime setTime = await _getNotificationsTimeFromPrefs();
final tz.TZDateTime scheduledDate = tz.TZDateTime(
tz.local, now.year, now.month, now.day, setTime.hour, setTime.minute);

if (now.isBefore(scheduledDate)) {
logger.d('Cancelling notification for today');
await _flutterLocalNotificationsPlugin.cancel(0);

// Get next valid date and add one day
final tomorrow =
_nextInstanceOfTime(setTime).add(const Duration(days: 1));
await scheduleDailyNotification(tomorrow, _notificationTitle,
_notificationBody, _notificationPayload);
}
}
Это не работает, потому что MatchDateTimeComponents: DateTimeComponents.Time означает, что дата игнорируется. Это просто запланирует уведомление на сегодня снова (учитывая, что время в будущем)
Есть ли способ отменить сегодняшнее уведомление без добавления фонового процесса в приложение?
Одна идея, которую я имел, состоит в том, чтобы использовать DateTimeComponents.dayOfweekandTime вместо dateTimeComponents.Time . Если сегодня в среду я мог бы отменить все уведомления, а затем запланировать их снова на каждый день, кроме среды. Но это будет означать, что с этого момента не будет отправлено никаких уведомлений по средам ...
Это кажется очень очевидной особенностью, и я надеюсь, что я что -то упускаю.

Подробнее здесь: https://stackoverflow.com/questions/794 ... ifications
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»