Что такое Expanded

Ответ

Expanded — это виджет в Flutter, который занимает доступное пространство вдоль главной оси родительского Row, Column или Flex. Он распределяет свободное место между всеми Expanded виджетами внутри одного контейнера, учитывая их flex-фактор (по умолчанию равен 1).

Пример:

Row(
  children: [
    Expanded(
      flex: 2, // Занимает 2/3 пространства
      child: Container(color: Colors.red),
    ),
    Expanded(
      flex: 1, // Занимает 1/3 пространства
      child: Container(color: Colors.blue),
    ),
  ],
)

Если flex не указан, все Expanded делят пространство поровну. Без Expanded дочерние виджеты занимают только необходимую им ширину/высоту.

Ответ 18+ 🔞

Смотри, объясню про этот Expanded в Flutter, чтобы ты не ломал голову, как я в своё время.

Представь себе, что у тебя есть Row или Column. Это как диван, на который ты рассаживаешь своих виджетов-друзей. Без Expanded каждый друг — сам по себе эгоист: сидит ровно на своей жопе, сколько ему нужно, и ни сантиметром больше. Один — тощий, другой — толстый, между ними — пустота, как будто они в ссоре.

А теперь ты говоришь: «Ребята, хватит бздеть, занимайте весь диван!». Вот для этого и нужен Expanded. Ты заворачиваешь каждого придурка в этот виджет, и они начинают делить оставшееся свободное место, как последнюю шоколадку.

Главный прикол — в параметре flex. Это как коэффициент жадности. По умолчанию у всех flex: 1, то есть «дели поровну, не выёбывайся». Но если одному поставишь flex: 2, а другому оставишь flex: 1, то первый хапнет в два раза больше места. Честно? Нет. Справедливо? Да похуй, так работает.

Вот смотри на этот код, тут всё понятно:

Row(
  children: [
    Expanded(
      flex: 2, // Этот красный контейнер — жадная сволочь, заберёт 2/3 всего места
      child: Container(color: Colors.red),
    ),
    Expanded(
      flex: 1, // А этот синий — скромняга, довольствуется оставшейся 1/3
      child: Container(color: Colors.blue),
    ),
  ],
)

Если flex не указывать вообще, то все Expanded внутри одного родителя поделят пространство строго пополам, как братья-близнецы. А без Expanded твои виджеты будут торчать, как хуй с горы, занимая только свою родную ширину, и всё свободное место так и останется пустым. Пиздец, да? Вот и весь секрет.