Ответ
Scaffold — это базовый виджет-макет в Flutter, который реализует базовую визуальную структуру страницы в соответствии с Material Design. Он предоставляет готовые слоты для стандартных компонентов интерфейса.
Основные элементы, которые можно разместить в Scaffold:
appBar: Верхняя панель (AppBar).body: Основное содержимое страницы.floatingActionButton: Плавающая кнопка действия (FAB).drawer: Выдвижная боковая панель (слева).endDrawer: Выдвижная панель справа.bottomNavigationBar: Нижняя панель навигации.bottomSheet: Всплывающая панель снизу.
Пример использования:
Scaffold(
appBar: AppBar(
title: Text('Главная'),
actions: [
IconButton(icon: Icon(Icons.search), onPressed: () {}),
],
),
drawer: Drawer(
child: ListView(
children: [
ListTile(title: Text('Профиль'), onTap: () {}),
ListTile(title: Text('Настройки'), onTap: () {}),
],
),
),
body: Center(
child: Text('Привет, мир!'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Главная'),
BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Настройки'),
],
),
);
Почему он важен: Scaffold избавляет разработчика от ручного управления расположением, отступами и поведением (например, автоматическим сдвигом контента при появлении клавиатуры или SnackBar) этих стандартных элементов, обеспечивая согласованный и идиоматичный для платформы вид.
Ответ 18+ 🔞
Слушай, давай разберём этот ваш Scaffold, а то некоторые его как будто впервые видят, ёпта. Это ж основа основ, как хлеб для бутерброда — без него всё разъезжается и выглядит пиздопроебибна.
Представь себе обычный экран в андроидном приложении. Вверху шапка с названием и кнопками, по бокам выезжают менюшки, снизу панелька навигации, а посередине — основное содержимое. Так вот, Scaffold — это и есть эта готовая болванка, каркас, в который ты просто вставляешь свои куски. Он сам всё расставит по правилам Material Design, чтобы не пришлось вручную каждый раз отступы под клавиатуру считать — волнение ебать, честно.
Что можно в него воткнуть, основные слоты:
appBar: Это шапка, верхняя панель. Туда заголовок, кнопки "Назад" или меню.body: А это, ясень пень, тело страницы. Сюда ты и пихаешь весь свой основной контент: списки, текст, картинки.floatingActionButton: Та самая плавающая круглая кнопка, обычно для главного действия. Значок "плюсик" для добавления чего-нибудь — классика.drawer: Боковушка, которая выезжает слева, если пальцем от края потянуть. Там обычно меню всего приложения.endDrawer: Та же хуйня, но выезжает справа. На случай, если левая уже занята или дизайнеру просто захотелось.bottomNavigationBar: Панелька внизу с иконками для переключения между разделами приложения. Без неё сейчас ни одно уважающее себя приложение не живёт.bottomSheet: Всплывающая штука снизу экрана, типа панельки для выбора действия или каких-нибудь опций.
Вот смотри, как это всё собирается в коде. Просто, блядь, конструктор:
Scaffold(
appBar: AppBar(
title: Text('Главная'),
actions: [
IconButton(icon: Icon(Icons.search), onPressed: () {}),
],
),
drawer: Drawer(
child: ListView(
children: [
ListTile(title: Text('Профиль'), onTap: () {}),
ListTile(title: Text('Настройки'), onTap: () {}),
],
),
),
body: Center(
child: Text('Привет, мир!'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Главная'),
BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Настройки'),
],
),
);
А в чём, собственно, прикол? Да в том, что Scaffold — это не просто контейнер. Это умная хуйня, которая за тебя решает овердохуища проблем. Сам отступы безопасных зон учтёт, контент при появлении клавиатуры подвинет, чтобы не заезжала, и уведомления (типа SnackBar) красиво покажет, не перекрывая твои кнопки. Без него ты будешь как тот самый распиздяй, который пытается собрать табуретку без инструкции, молотком по пальцам. Так что не выёбывайся, используй Scaffold, и будет тебе счастье, а не хиросима.