enum BirthdayStatus { THISYEAR, NEAR, NOWADAY, NEXTYEAR; String get translate { switch (this) { case BirthdayStatus.THISYEAR: return 'Будет в этом году'; case BirthdayStatus.NEAR: return 'Скоро день рождение '; case BirthdayStatus.NOWADAY: return 'Сегодня день рождение!'; case BirthdayStatus.NEXTYEAR: return 'Будет в следующем году'; } } } extension DateTimeX on DateTime { String getDate() { return '${this.day}-${this.month}-${this.year}'; } } class Birthday { final DateTime time; final String message; BirthdayStatus status = BirthdayStatus.NOWADAY; Birthday(this.time, this.message); @override String toString() { return 'статус: ${status.translate}\t\tдата: ${time.getDate()}\t\tсообщение: $message '; } } class Scheduler { List birthdays; Scheduler(this.birthdays); void sort() { birthdays.sort((a, b) => (-1) * (a.time.compareTo(b.time))); } void printSchedule(DateTime today) { sort(); print('Дедлайны:'); Future.delayed(new Duration(milliseconds: 1), () { print('Сегодня ${today.getDate()}'); }); for (Birthday deadline in birthdays) { Duration diff = deadline.time.difference(today); int days = diff.inDays; if (days <= 0) { deadline.status = BirthdayStatus.NOWADAY; print('Сегодня день рождение \t\t$deadline'); } else if (days <= 31) { deadline.status = BirthdayStatus.NEAR; print('Осталось $days суток \t\t$deadline'); } else if (days <= 365) { deadline.status = BirthdayStatus.THISYEAR; print('Будет в этом году! \t\t$deadline'); } else { deadline.status = BirthdayStatus.NEXTYEAR; print('До следующего года! \t\t$deadline'); } } } } void main() { DateTime today = DateTime(2024, 9, 23); var father = new Birthday(new DateTime(2025, 9, 24), "Иванов И.И."); var brother = new Birthday(new DateTime(2024, 9, 26), "Васечкин В.В."); var cousin = new Birthday(new DateTime(2024, 9, 23), "Тарасов Т.Т."); var friend = new Birthday(new DateTime(2025, 10, 3), "Игнатова И.И."); List birthdays = [father, brother, cousin, friend]; var scheduler = new Scheduler(birthdays); scheduler.printSchedule(today); }