2

我正在使用flutter_local_notifications在每天的特定时间安排通知。

用户可以选择不同的时区,它适用于Android但不适用于iOS,因为我没有使用iOS的经验,我不知道它如何处理通知。

Future<void> _showNotification(
  BuildContext? context,
  NotificationDetails platformChannelSpecifics,
  Prayer prayer,
  DateTime dateTime) async {// dateTime is the time in another time zone, and time is the time passed to the zonedScheduled method
var time = _nextInstanceOfPrayer(dateTime);

if (time == null) {
  return;
}

await flutterLocalNotificationsPlugin.zonedSchedule(
  _getId(time, prayer: prayer.toString()),
  prayer.toStr(context!),
  _getPrayerText(prayer.toStr(context)),
  time,
  platformChannelSpecifics,
  androidAllowWhileIdle: true,
  uiLocalNotificationDateInterpretation:
      UILocalNotificationDateInterpretation.absoluteTime,
);}

而这种获取时间的方法:

tzZone.TZDateTime? _nextInstanceOfPrayer(DateTime dateTime) {
final DateTime now = DateTime.now();

//converts time to specific location
tzZone.TZDateTime scheduledDate = tzZone.TZDateTime.from(
  dateTime.subtract(now.timeZoneOffset),
  tzZone.UTC,
);
if (scheduledDate.toUtc().isBefore(now.toUtc())) {
  return null;
}

return scheduledDate;}

我正在尝试在手机当地时间的时间(时间)添加通知,例如,用户选择 +5 GMT 时区(下午 5:00),而当地时区是 +2 GMT(下午 2:00) ),我想添加一个本地时间为 (5:00PM +5 GMT) 的通知,并在 (5:00 +2 GMT) 上显示。

我试图将两次都转换为 UTC 并在 UTC - 本地时区显示通知(如第二个代码所示),代码显示有待处理的通知,但是当我更改设备的时间时它没有显示任何内容.

注意:当我在 5 秒后添加手动时间时,效果很好

DateTime.now().add(Duration(seconds: 5));
4

0 回答 0