Не работает, потому что 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(':');
}