TGViewer
Flutter & Dart | Мобильный трудоголик Flutter & Dart | Мобильный трудоголик @hardworkerflutter · 405 subscribers
Post #22 250
👣 Flutter: как FractionallySizedBox и FittedBox спасают адаптивную верстку.

Создание адаптивного интерфейса во Flutter часто сводится к использованию MediaQuery и расчетам на основе размеров экрана. Но есть два менее известных, но исключительно мощных виджета, которые решают специфичные задачи адаптивности на уровне композиции, без сложной математики. FractionallySizedBox и FittedBox - это не просто обертки, а точные инструменты контроля пропорций и масштабирования.


FractionallySizedBox - размер в процентах:

Этот виджет задает размер дочернего элемента как долю от родителя. Например, кнопка на 80% ширины контейнера:


FractionallySizedBox(
widthFactor: 0.8,
child: ElevatedButton(...),
)


Главное условие: родитель должен иметь конкретный размер. Не будет работать в Column без Expanded, где ширина не ограничена.


FittedBox - умное масштабирование:

Когда контент не помещается, FittedBox масштабирует его, сохраняя пропорции. Типичный случай - крупный заголовок в маленькой карточке:


FittedBox(
child: Text('Заголовок', style: TextStyle(fontSize: 40)),
)


Это предотвращает OverflowError и автоматически подбирает размер.


В чем разница между FractionallySizedBox и FittedBox:

🔵FractionallySizedBox управляет контейнером (задает его размер как процент от родителя).

🔵FittedBox управляет содержимым (масштабирует виджет внутри существующего контейнера).


Когда что использовать:

🔵Используйте FractionallySizedBox для: кнопок фиксированной ширины, прогресс-баров, колонок сетки.

🔵Используйте FittedBox для: текста в ограниченной области, иконок в CircleAvatar, изображений-превью.


💡 Вывод:

Изучение адаптивности во Flutter не должно начинаться и заканчиваться на MediaQuery.of(context).size.width. Такие виджеты, как FractionallySizedBox и FittedBox, предлагают декларативный и композиционный подход к решению распространенных проблем верстки. Они смещают фокус с реактивного программирования («посчитай размер экрана и обнови») на декларативное описание отношений между элементами интерфейса («этот элемент занимает половину родителя, а его содержимое подстраивается под доступное пространство»).

Внедрение этих виджетов в повседневную практику сокращает количество кастомных расчетов, делает код чище и предсказуемее, а главное - создает по-настоящему гибкий интерфейс, который корректно ведет себя не только на разных размерах экрана, но и в сложных, вложенных layout-структурах. Это следующий уровень мастерства после освоения Row, Column и Flex.


➡️ Flutter & Dart | Мобильный трудоголик
  • 👍 3
  • ❤ 1
  • 🔥 1
More from @hardworkerflutter
  1. Sep 29, 2026👣 Как встроить Unity игру во Flutter приложение Flutter отлично справляется с интерфейсом…
  2. Sep 25, 2026👨‍💻 Гонка за самую мощную ИИ-модель подходит к концу? Последние несколько лет за развити…
  3. Sep 22, 2026👣 Как async* упрощает работу с потоками в Dart В Dart есть инструмент, который многие нед…
  4. Sep 15, 2026👣 Влияет ли выбор state management на производительность Flutter? Можно ли ускорить Flutt…
  5. Sep 11, 2026👣 Плагин Flutter для VS Code обновился до версии 3.142.0 Вышло обновление плагина Flutter…
  6. Sep 8, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →