Переходите на Flutter 3.27, тут быстрее и плавнее (и Dart тоже обновите)
Привет, Хабр! Меня зовут Юра Петров, я Tech Lead в Friflex и автор канала «Мобильный разработчик».
Flutter обновился — вышла версия 3.27. Улучшений много, от рендеринга и оптимизации производительности до новых возможностей для работы с интерфейсами и инструментами разработки. В этой статье расскажу, что мне показалось интересным и почему.
Impeller на Android по умолчанию
Теперь Impeller — стандартный движок на Android. Поддержка Skia сохраняется для устройств без Vulkan.
Почему это круто
Старый движок Skia не всегда справлялся с высокой нагрузкой на современных устройствах. Это приводило к задержкам в анимациях и визуальному «рваному» рендерингу. Теперь приложения с интенсивным использованием анимаций, графики или игр получат заметный прирост скорости и плавности.
Cupertino: ближе к нативному iOS
Улучшены CupertinoCheckbox, CupertinoRadio и CupertinoSwitch: добавлены свойства для настройки (например, курсоры мыши, изображения переключателей), улучшено поведение при нажатии. Новый прозрачный фон в CupertinoNavigationBar позволяет создавать сложные анимации скроллинга.
Почему это круто
Виджеты Cupertino традиционно уступают Material по функциональности и гибкости настройки. Если вы разрабатываете приложения в стиле iOS, теперь можно создавать еще более детализированные интерфейсы, которые лучше соответствуют нативным стандартам Apple.
Pub Workspaces для монорепозиториев
Теперь можно создавать единый корневой pubspec.yaml, который будет связывать все проекты. Зависимости синхронизируются автоматически, что сокращает время на настройку и предотвращает конфликты.
Почему это круто
Управлять зависимостями в репозиториях с несколькими связанными проектами было сложновато. Каждый проект надо было настраивать отдельно. Обновление будет полезно при разработке SDK, плагинов или любых других проектов с общей кодовой базой, где важно синхронизировать зависимости.
Новый Flutter Inspector
Новый Inspector предлагает компактное отображение дерева, позволяет скрывать «системные» виджеты и добавляет удобный просмотр свойств, таких как layout или flex для элементов.
Почему это круто
В предыдущей версии дерево виджетов могло быть сложно понять, особенно при работе с глубоко вложенными структурами.
Счетчик загрузок у пакетов на pub.dev
Теперь на страницах пакетов отображаются 30-дневные данные о загрузках, а также график скачиваний по неделям. Это дает реальную картину использования пакета и помогает авторам анализировать популярность их решений.
Почему это круто
Раньше популярность пакета определялась через абстрактный «популярный рейтинг», который не всегда отражал реальное использование. Теперь выбрать надежную библиотеку с активным использованием будет проще.
Spacing для Row и Column
Параметр spacing позволяет задать отступы между дочерними элементами с минимальным количеством кода. Это экономит время и улучшает читаемость.
Почему это круто
Больше не нужно добавлять пустые виджеты или вручную прописывать padding для каждого элемента, чтобы добавить равномерные отступы между элементами в Row или Column.
Route Transitions: синхронизация анимаций при переходах
Теперь ModalRoutes могут синхронизировать анимации входа и выхода для разных маршрутов. Это особенно полезно, если один маршрут уходит с экрана, а другой заходит, и их анимации должны выглядеть плавно и логично.
Почему это круто
До этого анимации переходов между страницами могли быть несогласованными, что портило общий пользовательский опыт.
Разделители символов
Разделители символов теперь можно добавлять нативно. Это позволяет автоматически форматировать такие данные, как номера телефонов и кредитных карт, без с дополнительных библиотек или громоздких ручных методов.
Почему это круто
Больше не нужно писать дополнительный кода для обработки ввода и визуализации данных, когда форматируешь номера телефона или отображаешь банковские карт. Легче будет создавать интерфейсы, где требуется структурированное отображение текста, например, коды подтверждения (123–456).
Другие обновления
Стандартизация CardTheme, DialogTheme и TabBarTheme для более последовательного оформления;
CarouselView.weighted — новый способ настройки макетов внутри карусели с использованием весов (flexWeights);
Новая реализация Metal на iOS, которая позволяет уменьшить задержки и стабилизировать время рендеринга, поддержка 120 Гц;
Декодирование изображений в Safari и Firefox теперь выполняется через элементы ;
Значение флага для глубоких ссылок теперь по умолчанию true.
Уже успели что-то протестировать?