enum DeadlineStatus { HOT, WARM, COLD, FROZEN } extension DateTimeX on DateTime { String getDate(){ return '${this.day}-${this.month}-${this.year}'; } } extension DeadlineStatusX on DeadlineStatus { String get translate{ switch(this){ case DeadlineStatus.HOT: return 'КАК ТАК ЗАВТРА!?'; case DeadlineStatus.WARM: return 'К чему торопиться?'; case DeadlineStatus.COLD: return 'Дожить ещё надо '; case DeadlineStatus.FROZEN: return 'До сессии сдадим'; } } } class Deadline { final DateTime time; final String message; DeadlineStatus status = DeadlineStatus.COLD; Deadline(this.time, this.message); @override String toString() { return 'статус: ${status.translate}\t\tдата: ${time.getDate()}\t\tсообщение: $message '; } } class Scheduler { List deadlines; Scheduler(this.deadlines); void sort(){ deadlines.sort((a, b)=>(-1)*(a.time.compareTo(b.time))); } void printSchedule(DateTime today) async { sort(); print('Дедлайны:'); await Future.delayed( new Duration(milliseconds: 1), () { print('Сегодня ${today.getDate()}'); } ); for (Deadline deadline in deadlines){ Duration diff = deadline.time.difference(today); int days = diff.inDays; if (days <= 0){ deadline.status = DeadlineStatus.FROZEN; print('Всё, не успели \t\t$deadline'); } else if (days == 1){ deadline.status = DeadlineStatus.HOT; print('Остались $days сутки\t\t$deadline'); } else if (days <= 7){ deadline.status = DeadlineStatus.WARM; print('Осталось $days суток\t\t$deadline'); } else { deadline.status = DeadlineStatus.COLD; print('Осталось $days суток\t\t$deadline'); } } } } void main() { DateTime today = DateTime(2024, 9, 23); var opp = new Deadline(new DateTime(2024,9,24), "право: конспект по лекции 1"); var mdp = new Deadline(new DateTime(2024,9,26), "мобилки: лаб 1-2"); var macd = new Deadline(new DateTime(2024,9,20), "миакд: лаб 4-6"); var sistAn = new Deadline(new DateTime(2024,10,3), "системный анализ: лаб 1-2"); List deadlines = [opp,mdp,macd,sistAn]; var scheduler = new Scheduler(deadlines); scheduler.printSchedule(today); }