Дарт: покажи время до следующего раза - PullRequest
0 голосов
/ 20 декабря 2018

Как показать продолжительность времени обратного отсчета до следующего сигнала тревоги

Код:

TimeOfDay _nextSalah(List<SalahModel> salahs) {
    DateTime now = DateTime.now();
    List<TimeOfDay> times = [];
    int currentSalah;

    salahs.forEach((s) => times.add(s.time));
    times.add(TimeOfDay(hour: now.hour, minute: now.minute));
    times.sort((a, b) => a.hour.compareTo(b.hour));
    currentSalah = times.indexWhere((time) => time.hour == now.hour);

    return TimeOfDay(hour: times[currentSalah].hour, minute: times[currentSalah].minute);
}

Но разница во времени неверна и она не анимируется.Кроме того, как убедиться, что разница во времени работает, когда это тот же день и время следующего дня, т.е. сейчас 1 декабря, 2:30 вечера, и я хочу получить разницу во 2 декабря 6:15.

1 Ответ

0 голосов
/ 20 декабря 2018

Не работает, потому что TimeOfDay представляет время в течение дня, независимо от даты, на которую может приходиться день, или часового пояса.Время представлено только часами и минутами.

Если вы хотите обратный отсчет, охватывающий несколько дней, необходимо использовать DateTime, а для оценки разницы во времени требуется отформатировать перед форматированием строки результата, например:

String nextTime(DateTime nextAlarmTime) {
  List<int> ctime = [0, 0, 0, 0];
  DateTime now = DateTime.now();
  int diff = nextAlarmTime.difference(now).inSeconds;
  ctime[0] = diff ~/ (24 * 60 * 60); // days
  diff -= ctime[0] * 24 * 60 * 60;

  ctime[1] = diff ~/ (60 * 60); // hours
  diff -= ctime[1] * 60 * 60;

  ctime[2] = diff ~/ 60; // minutes
  ctime[3] = diff - ctime[2] * 60;  // seconds

  return ctime.map((val) => val.toString().padLeft(2, '0')).join(':');
}
...