Флаттер создает несколько еженедельных локальных уведомлений за указанный период - PullRequest
1 голос
/ 25 сентября 2019

Для моего будущего фитнес-приложения пользователь должен иметь возможность выбирать несколько дней между понедельником и воскресеньем, выбирать час и количество недель, для которых должно отображаться уведомление.Например: я выбираю четверг и пятницу, 2 часа дня и 6 недель.Поэтому я должен увидеть уведомление в четверг и пятницу в 2 часа дня в течение 6 недель.

Я работаю с плагином flutter_local_notifications 0.8.3, но, похоже, он не обладает необходимой мне функциональностью, еслиВы знаете любой другой подход к отображению уведомлений, как я написал выше, не стесняйтесь сообщить мне.

Редактировать:

код для запланированного уведомления, который я установил с помощью цикла for.Но это не совсем решение

Future<void> scheduleNotification(int id,{int, days,int hour, int minute, int second}) async {
  var scheduledNotificationDateTime =
  DateTime.now().add(Duration(days: days));
  var vibrationPattern = Int64List(4);
  vibrationPattern[0] = 0;
  vibrationPattern[1] = 1000;
  vibrationPattern[2] = 5000;
  vibrationPattern[3] = 2000;

  var androidPlatformChannelSpecifics = AndroidNotificationDetails(
      'your other channel id',
      'your other channel name',
      'your other channel description',
      icon: 'app_icon',
      largeIcon: 'app_icon',
      largeIconBitmapSource: BitmapSource.Drawable,
      vibrationPattern: vibrationPattern,
      enableLights: true,
      color: const Color.fromARGB(255, 255, 0, 0),
      ledColor: const Color.fromARGB(255, 255, 0, 0),
      ledOnMs: 1000,
      ledOffMs: 500);
  var iOSPlatformChannelSpecifics =
  IOSNotificationDetails(sound: "slow_spring_board.aiff");
  var platformChannelSpecifics = NotificationDetails(
      androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
  await flutterLocalNotificationsPlugin.schedule(
      id,
      'scheduled title',
      'scheduled body',
      scheduledNotificationDateTime,
      platformChannelSpecifics);
}

Код для еженедельного уведомления

var androidPlatformChannelSpecifics = AndroidNotificationDetails(
      'show weekly channel id',
      'show weekly channel name',
      'show weekly description');
  var iOSPlatformChannelSpecifics = IOSNotificationDetails();
  var platformChannelSpecifics = NotificationDetails(
      androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
  await flutterLocalNotificationsPlugin.showWeeklyAtDayAndTime(
      0,
      title,
      'Weekly notification shown on Monday at approximately ${_toTwoDigitString(time.hour)}:${_toTwoDigitString(time.minute)}:${_toTwoDigitString(time.second)}',
      Day.values[value],
      time,
      platformChannelSpecifics);
}

Данная проблема заключается в том, что я не знаю, как остановить еженедельное уведомление после x недель

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

 /// Shows a notification on a daily interval at the specified time
  Future<void> showWeeklyAtDayAndTime(int id, String title, String body,
      Day day, Time notificationTime, NotificationDetails notificationDetails,
      {String payload}) async {
    _validateId(id);
    var serializedPlatformSpecifics =
        _retrievePlatformSpecificNotificationDetails(notificationDetails);
    await _channel.invokeMethod('showWeeklyAtDayAndTime', <String, dynamic>{
      'id': id,
      'title': title,
      'body': body,
      'calledAt': DateTime.now().millisecondsSinceEpoch,
      'repeatInterval': RepeatInterval.Weekly.index,
      'repeatTime': notificationTime.toMap(),
      'day': day.value,
      'platformSpecifics': serializedPlatformSpecifics,
      'payload': payload ?? ''
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...