TGViewer
DartWay Ru | Flutter & Fullstack Dart DartWay Ru | Flutter & Fullstack Dart @dartway_dev_ru · 592 subscribers
Post #51 804
👨‍🎓 Почему не стоит использовать build-функции внутри виджетов

Часто встречаю в чужом коде (и нейросети регулярно предлагают) такой паттерн:
Widget build(BuildContext context) {
return Column(
children: [
_buildHeader(),
_buildContent(),
_buildFooter(),
],
);
}


На первый взгляд — разумно.
Обычно это объясняют «улучшением читаемости».

Читаемость — вещь субъективная.
Но есть три объективные и практические причины, почему так делать не стоит.

1. Отсутствие архитектурных границ

Правильный подход — выносить UI в отдельные виджеты и, по возможности, держать верстку в ui_kit.

При таком подходе:
- все необходимые данные явно передаются через параметры
- либо виджет сам слушает нужные ему состояния
class Header extends StatelessWidget {
final String title;
final bool isLoading;

const Header({
required this.title,
required this.isLoading,
});
}


Это заставляет:
✔️ явно определить зависимости
✔️ зафиксировать контракт
✔️ понимать, кто от кого зависит и что использует

build-функции работают иначе.

Они находятся внутри родительского виджета и:
❗️ имеют доступ ко всем его полям
❗️ могут читать и обновлять переменные стейта


В итоге:
- зависимости неявные
- границы ответственности размыты
- код начинает «протекать» между частями экрана

2. Отсутствие оптимизации
- Flutter эффективно работает за счёт дерева виджетов:
- изолирует rebuild’ы
- оптимизирует обновления
- переиспользует части UI

_buildHeader() — это не виджет, а обычная функция.

И для Flutter нет возможности изолировать пересборку

Любое изменение состояния
→ пересобирается весь build() целиком.

3. Файл начинает расползаться

На старте всё выглядит безобидно:
2–3 build-функции
~100 строк кода

Но со временем:
функции начинают использовать общие данные
появляется условная логика
части экрана начинают менять состояние родителя

Разделить это становится сложно, и каждый раз:

«проще добавить ещё одну функцию, чем делать рефакторинг»

В итоге - количество функций и длина файла растут вместе с проектом.
В нашей практике были виджеты до 3000 строк в одном файле, даже подумать о рефакторинге которого страшно.

Это не теория.
Это типичное состояние проектов, которые приходят к нам на поддержку.
И рефакторинг таких экранов — всегда болезненный.

Рекомендации команды DartWay

1. Не использовать build-функции и приватные UI-виджеты в том же файле
Они создают иллюзию структуры без реальных границ.

2. Дробить UI на отдельные виджеты
Каждый логический кусок интерфейса — отдельный класс с явными входными параметрами.

3. Максимально выносить UI в ui_kit
  • ❤ 4
  • 🔥 2
  • 👍 1
  • 👎 1
More from @dartway_dev_ru
  1. Oct 2, 2026Как эффективно делать ревью AI-кода? Я смотрел много докладов об изменениях в процессах ра…
  2. Oct 1, 2026Shopify уходит с React Native: что это значит для Flutter В 2020 Shopify перевёл все прило…
  3. Sep 28, 2026Новости DartWay Я принял решение полностью отказаться от Serverpod, чтобы снять все ограни…
  4. Sep 27, 2026Dart MCP: что реально даёт ИИ-агенту MCP-сервер встроен в Dart SDK с июля 2025 года. Подкл…
  5. Sep 25, 2026Serverpod 4: обзор с комментариями Вышел Serverpod 4, а вместе с ним App Studio. Сам я с S…
  6. Sep 4, 2026Flutter 3.47: что сломается и что делать до ноября Записал разбор — первый выпуск новой се…
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 →