Почему вынос Material и Cupertino из ядра Flutter ускоряет исправление ошибок и разработку новых функций
9 сентября 2026 г. · 4 мин чтения
Flutter всегда был фреймворком «все включено» с отличными инструментами, системами дизайна, анимациями и многим другим. Но батарейки не вечны, поэтому очень важно иметь возможность заменить их при необходимости. В 2017 году, когда Flutter только начинал свой путь, решение сделать Material и Cupertino частью ядра считалось верным. Перенесемся в 2020-е годы: взгляды изменились, и «батарейки» Material и Cupertino стали казаться скорее припаянными, чем просто включенными в комплект. В течение многих лет улучшение этой системы было главным запросом от разработчиков Flutter. И вот, в 2026 году, долгий процесс исполнения этого желания наконец-то подходит к завершению.
Что мы делаем
Начав несколько месяцев назад и завершив в августе 2026 года, мы заморозили внесение изменений в библиотеки Material и Cupertino внутри фреймворка Flutter и выпустили их точные копии на pub.dev как версии 1.0.0 пакетов pkg:material_ui и pkg:cupertino_ui. (Эти внешние библиотеки не заморожены и открыты для участия сообщества!) Затем, в будущем, этот процесс завершится устареванием и окончательным удалением библиотек Material и Cupertino из самого фреймворка Flutter.
Причин для приостановки другой работы ради завершения этого маневра много, но некоторые из них описаны ниже.
Снижение сложностей при обновлении Flutter
В течение многих лет обновление Flutter для получения патчей безопасности и других исправлений неизбежно включало в себя любые обновления UI Material или Cupertino. Излишне говорить, что это было основным источником проблем для разработчиков, из-за чего многие команды оставались на старых версиях Flutter. Это также означало, что когда команды наконец решались на обновление, задача могла занимать несколько недель работы разработчиков и блокировать работу над репозиториями, пока команды исправляли изменения в интерфейсе.
Теперь, когда библиотеки Material и Cupertino вынесены из ядра фреймворка, мы ожидаем, что обновление Flutter снова станет простой задачей, какой оно и должно было быть всегда — усложняясь только тогда, когда изменения базовой платформы требуют внимания разработчика Flutter.
Ускорение прогресса Material и Cupertino
Flutter выпускает новую стабильную версию каждые 3 месяца, что является довольно быстрым темпом для проекта такого масштаба. Однако, как бы быстро это ни было, это все равно означает, что в худшем случае (если код добавлен через минуту после закрытия приема изменений для стабильного релиза) может потребоваться до 16 недель, прежде чем это изменение увидит свет в стабильном релизе. Это… не очень хорошо.
Разделенные на собственные пакеты, pkg:material_ui и pkg:cupertino_ui теперь могут выпускаться по собственному еженедельному графику. Это упрощает рабочие процессы CI и облегчает внесение вклада, особенно для тех, кто не знаком с внутренним устройством Flutter.
По этим причинам мы ожидаем, что Material и Cupertino ускорят темпы разработки и будут лучше соответствовать обновлениям языков дизайна Google и Apple. Например, уже ведется работа над официальными реализациями Liquid Glass и Material 3 Expressive. Мы работаем с нашим сообществом авторов пакетов, чтобы гарантировать, что реализации этих библиотек во Flutter имеют наилучшее качество и совместимость.
Укрепление базовых виджетов
Одним из непредвиденных последствий включения библиотек Material и Cupertino в состав фреймворка Flutter стало то, что возникло слишком большое искушение создавать фундаментальную функциональность внутри этих библиотек дизайна. Обе они технически были построены поверх библиотеки простых виджетов, но сама библиотека виджетов была полна пробелов и недостатков в базовых концепциях UI.
Чтобы исправить это, часть усилий по разделению будет направлена на заполнение этих пробелов в библиотеке виджетов, чтобы предложить более прочный фундамент, на котором разработчики смогут строить другие языки дизайна. Экосистема Flutter уже поддерживает множество языков дизайна, включая macos_ui, fluent_ui, yaru, arna, chicago, VSP, shadcn и другие. Со временем мы надеемся упростить эту задачу, дополнив основные виджеты Flutter более полезными строительными блоками.
Чего мы не делаем
Пакеты material_ui и cupertino_ui на pub.dev по-прежнему будут получать такое же внимание со стороны команды Flutter, и с 13 августа 2026 года они открыты для вклада от всех разработчиков Flutter. Хотя ресурсы команды Flutter ограничены и нам иногда приходится делать трудный выбор и понижать приоритет определенных инициатив, это не тот случай. Команда Flutter по-прежнему стремится поддерживать отличные предложения для Material и Cupertino, чтобы ваши приложения на Flutter выглядели современно и идиоматично на всех целевых платформах.
Взгляд в будущее
Все проекты, дожившие до двенадцати лет, имеют технический долг. Цель состоит не в том, чтобы полностью избежать такого долга, а в том, чтобы выявить его и выделить время и энергию на его погашение. Для команды Flutter решение вышеупомянутых проблем долгое время было в списке желаний, и мы рады наконец предоставить всем нашим разработчикам более плавные обновления, более быстрые инновации и более мощную библиотеку базовых виджетов.
Для начала, если ваши приложения используют flutter/material.dart или flutter/cupertino.dart, используйте dart fix, чтобы добавить новые автономные библиотеки в ваш файл pubspec.yaml версии 1.0.0 и заменить импорты на использование новых пакетов. Мы ожидаем, что это будет простая замена, но, пожалуйста, создайте issue, если столкнетесь с какими-либо проблемами.
Если вы UI-разработчик с опытом работы в Material или Cupertino, подумайте о внесении вклада в автономные библиотеки! Как всегда, мы рекомендуем либо найти интересующую вас проблему, либо подать запрос на добавление функции, которую вы хотели бы реализовать.
До следующего раза, удачного Flutter-разработки!
- Чтобы упростить вашу миграцию, мы намеренно выбрали версию 1.0.0 для обозначения автономной версии, которая идеально соответствует состоянию каждой библиотеки внутри фреймворка. В дальнейшем библиотеки будут развиваться с использованием семантического версионирования. ↩
Чтобы упростить вашу миграцию, мы намеренно выбрали версию 1.0.0 для обозначения автономной версии, которая идеально соответствует состоянию каждой библиотеки внутри фреймворка. В дальнейшем библиотеки будут развиваться с использованием семантического версионирования. ↩









