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

Что такое Material?

1.3 Junior🔥 91 комментариев
#Другое

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

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

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

Material — система дизайна и компоненты в Flutter

Material - это дизайн система от Google, реализованная в Flutter через пакет flutter/material.dart. Она обеспечивает готовые компоненты (widgets), цвета, шрифты и анимации, соответствующие Material Design спецификации.

Основное назначение Material

1. Стандартные компоненты (Widgets)

import 'package:flutter/material.dart';

AppBar() - верхняя панель
FloatingActionButton() - круглая кнопка
Scaffold() - основная структура страницы
Drawer() - боковое меню
NavigationBar() - нижняя навигация
Card() - карточка с тенью
Button(), ElevatedButton(), TextButton() - кнопки
TextField(), TextFormField() - поля ввода

2. Themeинг и стили

MaterialApp(
  title: "My App",
  theme: ThemeData(
    primaryColor: Colors.blue,
    colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
    useMaterial3: true,
  ),
  home: HomePage(),
)

3. Цвета Material Design

Colors.red
Colors.blue
Colors.green
Colors.grey
Colors.transparent

// С оттенками
Colors.red[100]  // светло-красный
Colors.red[500]  // основной красный
Colors.red[900]  // темно-красный

Material Design 2 vs Material Design 3

Material Design 2:

  • Классический Material Design
  • Четкие границы, скругления 4-8px
  • Фиксированные цвета

Material Design 3 (динамический):

ThemeData(
  useMaterial3: true,
  colorScheme: ColorScheme.fromSeed(
    seedColor: Colors.blue,
    brightness: Brightness.light,
  ),
)
  • Адаптивные цвета (Material You - берут из обоев)
  • Больше скруглений
  • Лучше адаптируется к системной теме

Основная структура Material приложения

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Flutter Demo",
      theme: ThemeData(
        primarySwatch: Colors.blue,
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage();

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Material Demo"),
      ),
      body: Center(
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () {},
              child: Text("Click me"),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Icon(Icons.add),
      ),
    );
  }
}

Основные Material компоненты

Структура экрана:

  • Scaffold - базовая структура (AppBar, Body, FAB, Drawer)
  • AppBar - верхняя панель
  • BottomNavigationBar - нижняя навигация
  • NavigationBar - современная нижняя навигация (M3)

Кнопки:

  • ElevatedButton - приподнятая кнопка (основная)
  • TextButton - текстовая кнопка
  • OutlinedButton - кнопка с границей
  • IconButton - кнопка с иконкой

Ввод данных:

  • TextField - текстовое поле
  • TextFormField - с валидацией
  • Checkbox - чекбокс
  • Radio - радиокнопка
  • Switch - переключатель

Контейнеры:

  • Card - карточка с тенью
  • Container - базовый контейнер
  • Padding - отступы
  • ListView - прокручиваемый список

Material Icons

import 'package:flutter/material.dart';

Icon(Icons.home)
Icon(Icons.settings)
Icon(Icons.favorite)
Icon(Icons.search)
Icon(Icons.menu)
Icon(Icons.arrow_back)

Полный список: https://fonts.google.com/icons

Темирование с Material

// Светлая тема
ThemeData(
  brightness: Brightness.light,
  primaryColor: Colors.blue,
  scaffoldBackgroundColor: Colors.white,
  appBarTheme: AppBarTheme(
    backgroundColor: Colors.blue,
    titleTextStyle: TextStyle(color: Colors.white),
  ),
)

// Темная тема
ThemeData(
  brightness: Brightness.dark,
  primaryColor: Colors.blue,
  scaffoldBackgroundColor: Colors.grey[900],
)

Material vs Cupertino

Material - для Android дизайна (most apps) Cupertino - для iOS дизайна (CupertinoApp, CupertinoButton)

Best Practice

  • Используй Material для большинства приложений
  • Следуй Material Design спецификации
  • Включи useMaterial3: true для современного дизайна
  • Используй ColorScheme.fromSeed для адаптивных цветов
  • Применяй темирование через ThemeData

Material - стандартный и рекомендуемый выбор для Flutter приложений.

Что такое Material? | PrepBro