Где применяется MaterialApp?

Ответ

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

  • Навигации: Объявления именованных маршрутов (routes) или генерации их на лету (onGenerateRoute).
  • Темы: Задания единой светлой или темной темы (theme, darkTheme) для всех дочерних виджетов.
  • Локализации: Подключения поддержки нескольких языков через localizationsDelegates.
  • Глобальных настроек: Указания заголовка приложения (title), который виден в меню переключения задач, и управления отладочной баннерной меткой.

Пример минимальной структуры:

void main() => runApp(
  MaterialApp(
    theme: ThemeData(primarySwatch: Colors.blue),
    home: MyHomePage(),
  ),
);

Для приложений под iOS с нативным look & feel можно использовать CupertinoApp.

Ответ 18+ 🔞

А, ну вот, MaterialApp, говоришь? Ёперный театр, это же как базовая станция для всего твоего приложения, чувак. Без него — нихуя не взлетит, как самолёт без крыльев. Представь себе главный распределительный щит, от которого по всему дому идут провода. Вот это он и есть.

Короче, этот виджет — главный затейник. Он настраивает всю подноготную под Material Design, эту гугловскую дизайн-систему. Ты его в корень ставишь, и он начинает свою магию. А магия у него какая?

  • Навигация: Это он решает, куда тебя перекинет, когда ты ткнёшь на кнопку. Можно маршруты по именам прописать (routes), а можно, если чувствуешь подвох и хочешь полный контроль, генерить их на ходу (onGenerateRoute). Удобно, ёпта.
  • Темы: Овердохуища важная штука! Не будешь же ты каждому кнопочке вручную цвет назначать? Вот тут задаёшь одну тему (theme) на всё приложение, и все виджеты-детки её подхватывают. Хочешь тёмную — пожалуйста, есть darkTheme. Красота.
  • Локализация: Если твоё приложение должно говорить не только по-русски матерному, а ещё на каких-нибудь языках — вот тут подключаешь делегатов (localizationsDelegates), и они всё переводят.
  • Всякая глобальная хрень: Заголовок приложения (title), который в меню переключения задач светится. Или эта противная жёлтая полоска «DEBUG» в углу — её тоже тут можно прибить, если терпения ноль ебать.

Вот смотри, как это выглядит в самом простом, голом виде. Код не трогаю, он святой.

void main() => runApp(
  MaterialApp(
    theme: ThemeData(primarySwatch: Colors.blue),
    home: MyHomePage(),
  ),
);

Всё, приложение готово к запуску. Тема синяя, стартовая страница — MyHomePage(). Проще некуда.

А, да, чуть не забыл! Если ты делаешь приложение под айфоны и хочешь, чтобы оно выглядело как родное, а не как гугловский эмигрант — есть CupertinoApp. Он то же самое делает, только в стиле iOS. Выбирай, что тебе ближе по душе.