В чем разница между Material и Cupertino?

«В чем разница между Material и Cupertino?» — вопрос из категории UI и вёрстка, который задают на 36% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Material и Cupertino — это две разные дизайн-системы, предоставляемые Flutter для создания нативных интерфейсов.

  • Material (package:flutter/material): Реализация Material Design от Google. Характерны плоские поверхности, чёткие геометрические формы, насыщенные цвета и выразительные анимации. Стандартный выбор для приложений на Android и кроссплатформенных проектов.

    MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Material App')),
        body: Center(
          child: ElevatedButton(
            onPressed: () {},
            child: const Text('Кнопка'),
          ),
        ),
      ),
    );
  • Cupertino (package:flutter/cupertino): Реализация Human Interface Guidelines от Apple. Имитирует нативные iOS-компоненты с полупрозрачностями, размытием, скевоморфными деталями (например, переключатели) и плавными анимациями.

    CupertinoApp(
      home: CupertinoPageScaffold(
        navigationBar: const CupertinoNavigationBar(
          middle: Text('Cupertino App'),
        ),
        child: Center(
          child: CupertinoButton(
            onPressed: () {},
            child: const Text('Кнопка'),
          ),
        ),
      ),
    );

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

Widget getPlatformButton() {
  if (Platform.isIOS) {
    return CupertinoButton(onPressed: () {}, child: const Text('Далее'));
  } else {
    return ElevatedButton(onPressed: () {}, child: const Text('Далее'));
  }
}

Также существуют библиотеки (например, adaptive_components), которые помогают создавать адаптивные интерфейсы.