← Назад к вопросам

Какими Widget часто пользуешься?

1.0 Junior🔥 151 комментариев
#Flutter виджеты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Часто используемые Widget в Flutter

В повседневной разработке на Flutter я работаю с определённым набором основных виджетов, которые встречаются в большинстве приложений. Понимание их функциональности и назначения критически важно для эффективной разработки.

Контейнеры и Layout

Container — самый универсальный виджет для создания прямоугольных областей с настройкой отступов, границ, фона и теней. Я использую его для декорирования и позиционирования элементов:

Container(
  margin: EdgeInsets.all(16),
  padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(12),
    boxShadow: [BoxShadow(blurRadius: 8, color: Colors.black12)],
  ),
  child: Text("Контент"),
)

Column и Row — основные виджеты для вертикального и горизонтального расположения дочерних элементов. С помощью свойств mainAxisAlignment, crossAxisAlignment и mainAxisSize управляю распределением пространства.

Stack — позволяет накладывать виджеты друг на друга с абсолютным позиционированием. Часто использую для создания сложных UI-макетов с перекрытиями:

Stack(
  children: [
    Image.asset("background.png"),
    Positioned(
      bottom: 20,
      right: 20,
      child: FloatingActionButton(onPressed: () {}),
    ),
  ],
)

Expanded и Flexible — для распределения доступного пространства между дочерними виджетами внутри Row/Column. Expanded заполняет всё доступное место, Flexible даёт больше контроля.

Ввод данных и интерактивность

TextField — основной виджет для ввода текста. Оборачиваю его в Form для валидации и управления состоянием:

TextField(
  controller: _controller,
  decoration: InputDecoration(
    hintText: "Введите текст",
    border: OutlineInputBorder(),
    prefixIcon: Icon(Icons.search),
  ),
  onChanged: (value) => setState(() {}),
)

Button-виджеты (ElevatedButton, TextButton, OutlinedButton) — для действий пользователя. Выбираю в зависимости от визуальной иерархии:

ElevatedButton(
  onPressed: () => _handleSubmit(),
  child: Text("Отправить"),
)

GestureDetector — для обработки жестов (касания, двойные нажатия, длинное нажатие). Более гибкий чем специализированные кнопки.

Списки

ListView — для отображения прокручиваемых списков. Использую .builder конструктор для эффективной работы с большими списками:

ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) => ListTile(
    title: Text(items[index].name),
  ),
)

GridView — для сеток элементов. Часто применяю для галерей или каталогов:

GridView.count(
  crossAxisCount: 2,
  children: List.generate(10, (i) => Container()),
)

Текст и иконки

Text — основной виджет для отображения текста с поддержкой стилизации, теней и переноса.

Icon и IconButton — для отображения иконок и кнопок с иконками из Material Design набора.

Навигация и состояние

Scaffold — структурирует экран с appBar, body и floatingActionButton.

AppBar — для заголовка экрана с действиями.

BottomNavigationBar — для навигации между экранами приложения.

В целом, эти виджеты покрывают 90% случаев использования в типичном приложении, а их комбинация позволяет создавать сложные интерфейсы.

Какими Widget часто пользуешься? | PrepBro