zonedSchedule method

Future<void> zonedSchedule(
  1. int id,
  2. String title,
  3. String body,
  4. TZDateTime scheduledDate,
  5. IOSNotificationDetails notificationDetails,
  6. {@required UILocalNotificationDateInterpretation uiLocalNotificationDateInterpretation,
  7. String payload,
  8. DateTimeComponents matchDateTimeComponents}
)

Schedules a notification to be shown at the specified time in the future in a specific time zone.

Due to the limited support for time zones provided the UILocalNotification APIs used on devices using iOS versions older than 10, the uiLocalNotificationDateInterpretation is needed to control how scheduledDate is interpreted. See official docs at https://developer.apple.com/documentation/uikit/uilocalnotification/1616659-timezone for more details. Note that due to this limited support, it's likely that on older iOS devices, there will still be issues with daylight savings except for when the time zone used in the scheduledDate matches the device's time zone and uiLocalNotificationDateInterpretation is set to UILocalNotificationDateInterpretation.wallClockTime.

Implementation

Future<void> zonedSchedule(
  int id,
  String title,
  String body,
  TZDateTime scheduledDate,
  IOSNotificationDetails notificationDetails, {
  @required
      UILocalNotificationDateInterpretation
          uiLocalNotificationDateInterpretation,
  String payload,
  DateTimeComponents matchDateTimeComponents,
}) async {
  validateId(id);
  validateDateIsInTheFuture(scheduledDate);
  ArgumentError.checkNotNull(uiLocalNotificationDateInterpretation,
      'uiLocalNotificationDateInterpretation');
  final Map<String, Object> serializedPlatformSpecifics =
      notificationDetails?.toMap() ?? <String, Object>{};
  await _channel.invokeMethod(
      'zonedSchedule',
      <String, Object>{
        'id': id,
        'title': title,
        'body': body,
        'platformSpecifics': serializedPlatformSpecifics,
        'payload': payload ?? '',
        'uiLocalNotificationDateInterpretation':
            uiLocalNotificationDateInterpretation.index,
      }
        ..addAll(scheduledDate.toMap())
        ..addAll(matchDateTimeComponents == null
            ? <String, Object>{}
            : <String, Object>{
                'matchDateTimeComponents': matchDateTimeComponents.index
              }));
}