Как правильно выбрать склонение "дней"/"дня" в зависимости от числа?

У меня есть приложение написанное на Flutter, которое позволяет составлять запись о прошедшем дне. Также я написал код, который показывает, какое количество дней прошло с момента последней записи. Но возникла загвоздка: как сделать так, чтобы слово "день" склонялось правильно, в зависимости от числа (пропущено N "дней", "дня", "день").

final currentDate = entry.value[0].date;
final previousDate = prevEntry.value.last.date;
    if (previousDate.difference(currentDate).inDays > 1) {
        yield SliverPadding(
            padding: const EdgeInsets.symmetric(vertical: 10),
            sliver: SliverToBoxAdapter(
              child: Center(
                child:
                    Text('Пропущено ${previousDate.difference(currentDate).inDays} дней'),
              ),
            ),
         );
      }

Код, который отвечает как раз за вывод числа пропущенных дней


Ответы (2 шт):

Автор решения: MipZ

Решил проблему следующим образом:

  String _getDatAddition(int days) {
final double preLastDigit = days % 100 / 10;
if (preLastDigit == 1) {
  return 'Пропущено $days дней';
}
switch (days % 10) {
  case 1:
    return 'Пропущен $days день';
  case 2:
  case 3:
  case 4:
    return 'Пропущено $days дня';
  default:
    return 'Пропущено $days дней';
}
→ Ссылка
Автор решения: Twwan

Буквально вчера то же самое надо было сделать. Сделал пока так:

    static String _getNounForm(int number, List<String> forms) {
    int lastDigit = number % 10;
    int lastTwoDigits = number % 100;

    if (lastTwoDigits >= 11 && lastTwoDigits <= 14) {
      return forms[2];
    }

    if (lastDigit == 1) {
      return forms[0];
    }

    if (lastDigit >= 2 && lastDigit <= 4) {
      return forms[1];
    }

    return forms[2];
  }

String monthsString = _getNounForm(months, ['месяц', 'месяца', 'месяцев']);
String daysString = _getNounForm(days, ['день', 'дня', 'дней']);

return '$months $monthsString $days $daysString';
→ Ссылка