🧩Scaffold
1. Что такое Scaffold
ScaffoldScaffold в Flutter — это основа пользовательского интерфейса, создающая базовый макет для экрана приложения. Он предоставляет структуру, в которой легко добавлять такие компоненты, как AppBar, FloatingActionButton, Drawer, и другие. Это основной виджет, используемый для создания традиционных макетов приложений с верхней панелью, основным содержимым и различными интерактивными элементами.
2. Пример использования Scaffold
Scaffold
import 'package:flutter/material.dart';
class ScaffoldExample extends StatelessWidget {
const ScaffoldExample({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Пример Scaffold'),
),
body: const Center(
child: Text('Основное содержимое'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: const Icon(Icons.add),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
BottomNavigationBarItem(icon: Icon(Icons.person), label: 'Profile'),
BottomNavigationBarItem(
icon: Icon(Icons.settings), label: 'Settings'),
],
),
);
}
}
3. Объяснение кода
MaterialApp — виджет, который оборачивает
Scaffoldи задает тему для приложения.Scaffold — создает базовый макет экрана:
appBar— верхняя панель, содержащая заголовок.body— основная область для размещения содержимого.floatingActionButton— плавающая кнопка действия в правом нижнем углу.
Все настройки Scaffold
1. PreferredSizeWidget? appBar
Описание: Верхняя панель навигации, часто используемая для отображения заголовка экрана, кнопок и меню. Пример:
appBar: AppBar(
title: Text('Заголовок'),
) // Верхняя панель с заголовком2. Widget? body
Описание: Основное содержимое экрана, где располагаются виджеты, которые видит пользователь. Пример:
body: Center(
child: Text('Основное содержимое'),
) // Центрированный текст3. Widget? floatingActionButton
Описание: Кнопка для быстрого действия, плавающая над контентом. Пример:
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
) // Плавающая кнопка с иконкой добавления4. FloatingActionButtonLocation? floatingActionButtonLocation
Описание: Положение floatingActionButton на экране. Пример:
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked // Центрированное размещение5. FloatingActionButtonAnimator? floatingActionButtonAnimator
Описание: Анимация появления и исчезновения для floatingActionButton. Пример:
floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling // Анимация масштабирования6. List<Widget>? persistentFooterButtons
Описание: Кнопки, которые остаются закрепленными внизу экрана. Пример:
persistentFooterButtons: [
ElevatedButton(
onPressed: () {},
child: Text('Кнопка 1'),
),
] // Закрепленные кнопки внизу7. AlignmentDirectional persistentFooterAlignment
Описание: Положение кнопок persistentFooterButtons. Пример:
persistentFooterAlignment: AlignmentDirectional.centerEnd // Выравнивание кнопок по правому краю8. Widget? drawer
Описание: Виджет бокового меню, открываемого слева. Пример:
drawer: Drawer(
child: ListView(
children: [ListTile(title: Text('Меню'))],
),
) // Левое боковое меню9. void Function(bool)? onDrawerChanged
Описание: Колбэк, который вызывается при открытии и закрытии drawer. Пример:
onDrawerChanged: (isOpen) {
print('Drawer открыт: $isOpen');
} // Выводит в консоль, открыт ли Drawer10. Widget? endDrawer
Описание: Виджет бокового меню, открываемого справа. Пример:
endDrawer: Drawer(
child: ListView(
children: [ListTile(title: Text('Правое меню'))],
),
) // Правое боковое меню11. void Function(bool)? onEndDrawerChanged
Описание: Колбэк, вызываемый при открытии или закрытии endDrawer. Пример:
onEndDrawerChanged: (isOpen) {
print('End Drawer открыт: $isOpen');
} // Выводит в консоль, открыт ли End Drawer12. Widget? bottomNavigationBar
Описание: Нижняя панель навигации с несколькими пунктами. Пример:
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Главная'),
BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Настройки'),
],
) // Панель навигации внизу13. Widget? bottomSheet
Описание: Нижний лист, отображаемый поверх содержимого экрана. Пример:
bottomSheet: BottomSheet(
onClosing: () {},
builder: (context) => Container(
height: 100,
color: Colors.blue,
child: Center(child: Text('Нижний лист')),
),
) // Нижний лист с текстом14. Color? backgroundColor
Описание: Цвет фона для Scaffold. Пример:
backgroundColor: Colors.grey[200] // Светло-серый фон15. bool? resizeToAvoidBottomInset
Описание: Позволяет автоматически смещать содержимое экрана при появлении клавиатуры. Пример:
resizeToAvoidBottomInset: true // Контент смещается при появлении клавиатуры16. bool primary
Описание: Если true, Scaffold захватывает MediaQuery для определения высоты экрана. Пример:
primary: true // Scaffold будет использовать всю высоту экрана17. DragStartBehavior drawerDragStartBehavior
Описание: Определяет, как начинается перетаскивание для открытия drawer. Пример:
drawerDragStartBehavior: DragStartBehavior.start // Открытие с началом перетаскивания18. bool extendBody
Описание: Позволяет контенту Scaffold находиться за нижней панелью навигации. Пример:
extendBody: true // Контент занимает всю высоту экрана19. bool extendBodyBehindAppBar
Описание: Позволяет контенту располагаться за верхней панелью. Пример:
extendBodyBehindAppBar: true // Контент простирается за верхней панелью20. Color? drawerScrimColor
Описание: Цвет полупрозрачного слоя при открытом drawer. Пример:
drawerScrimColor: Colors.black54 // Черный полупрозрачный цвет21. double? drawerEdgeDragWidth
Описание: Ширина области экрана, откуда можно начать открытие drawer. Пример:
drawerEdgeDragWidth: 50.0 // Ширина перетаскивания — 50 пикселей22. bool drawerEnableOpenDragGesture
Описание: Разрешает или запрещает жест для открытия drawer. Пример:
drawerEnableOpenDragGesture: false // Отключает жест для открытия Drawer23. bool endDrawerEnableOpenDragGesture
Описание: Разрешает или запрещает жест для открытия endDrawer. Пример:
endDrawerEnableOpenDragGesture: true // Включает жест для открытия End Drawer24. String? restorationId
Описание: ID для восстановления состояния экрана. Пример:
restorationId: 'mainScaffold' // ID для восстановления состоянияИтог
Scaffold — это мощный инструмент, который создает каркас экрана с множеством функций, таких как AppBar, Drawer, FloatingActionButton и другие. Он позволяет легко настраивать интерфейс приложения и добавлять базовые элементы для создания стандартного макета приложения.
Last updated