Вышел Flutter 3.50 с Dart 3.14: дизайн-библиотеки вынесены из SDK, нативный interop стал стабильным

Google выпустила Flutter 3.50 вместе с Dart 3.14. Главное для команд: встроенные библиотеки Material и Cupertino официально объявлены устаревшими и переезжают в отдельные пакеты material_ui и cupertino_ui, генераторы FFIgen и JNIgen для прямых вызовов Objective-C, Java и Kotlin стали стабильными, а Android-тулчейн по умолчанию переведён на AGP 9 и API 36.
Релиз и анонс вышли 11 ноября 2026 года. Старый код продолжает собираться, но анализатор уже показывает предупреждения об устаревших импортах, а удаление встроенных библиотек запланировано на один из следующих релизов. Если ваша разработка мобильных приложений построена на одной кодовой базе под iOS и Android, миграцию лучше спланировать сейчас, а не в момент, когда сборка перестанет проходить.
Ниже — что вошло в релиз, что ломается и в каком порядке обновляться. Если вы только присматриваетесь к стеку, начните с объяснения, что такое Flutter и Dart простыми словами, и с описания того, как у нас устроена разработка приложений на Flutter.
Что изменилось во Flutter 3.50 и Dart 3.14
- Дизайн-системы отделены от фреймворка.
package:flutter/material.dart,package:flutter/cupertino.dartи их делегаты локализации вflutter_localizationsпомечены устаревшими. Замена — пакетыmaterial_uiиcupertino_ui; новые проекты изflutter createсразу импортируютmaterial_ui. - Прямой нативный interop. FFIgen (Objective-C и C) и JNIgen (Java и Kotlin) стабильны: Dart вызывает нативный код напрямую, без сериализации и обязательной асинхронности platform channels. Режим нативного interop в Pigeon пока в превью.
- Dart 3.14. Появилась команда
dart migrateдля перехода на следующую версию языка. Старые JS-библиотекиdart:html,dart:js,dart:js_utilиpackage:jsустарели, вместо них —dart:js_interopиpackage:web. - Веб. По данным Google, WebAssembly-сборка в Safari 26.2+ и Firefox 147+ даёт более чем вдвое выше частоту кадров, чем JavaScript, на тяжёлых бенчмарках виджетов. Флаг
--web-content-hashдобавляет хеши в имена файлов, превью WebParagraph уменьшает загрузку CanvasKit примерно с 5,46 до 3,75 МБ. - iOS. Задержка касаний уменьшена на целый кадр: на 16 мс на экранах 60 Гц и на 8 мс на 120 Гц ProMotion. Исправлены падения при запуске на iOS 27, вернулся
flutter screenshotдля реальных устройств. - ИИ-инструменты. Официальные плагины для ИИ-агентов, настройка MCP-сервера Dart и Flutter, а также «навыки» в каталоге
skills/пакетов pub.dev. Переименование в больших workspace в анализаторе ускорилось на 57%.
Что сломается при обновлении
Код не перестанет компилироваться в 3.50, но несколько изменений требуют действий уже сейчас:
- Android-плагины. Плагины, которые вручную подключают Kotlin Gradle Plugin, должны перейти на встроенный Kotlin и выставить ограничение
flutter: ">=3.44.0". Иначе — пониженный рейтинг на pub.dev и несовместимость с будущим AGP 10. - Новые значения по умолчанию. AGP 9.3.1, Gradle 9.5.0, минимум Java 17,
compileSdkиtargetSdk— API 36,minSdk— API 24. - Intent в релизных сборках Android. Значения
route,dart_entrypointиcached_engine_idиз внешних Intent теперь игнорируются, флаги движка вроде--dart-flagsотклоняются. Если на этом держались диплинки, их нужно перенести на штатную маршрутизацию. - iOS и CocoaPods. По данным Google, в декабре 2026 года trunk CocoaPods станет доступен только для чтения. Отключение Swift Package Manager теперь вызывает предупреждение, а саму возможность отключения уберут в одном из следующих релизов.
- Мелкие изменения API. У
IgnorePointerиAbsorbPointerудалено свойствоignoringSemantics, в мультиоконном API десктопаRegularWindowпереименован вWindow.
Порядок миграции: пять шагов
- Включите Swift Package Manager в iOS-проекте и проверьте, что все плагины собираются без CocoaPods.
- Перенесите импорты дизайн-библиотек:
dart fix --apply --code=migrate_design_widgets, затем проверьте собственные виджеты-обёртки над Material. - Обновите Android-плагины на встроенный Kotlin и сверьте
build.gradleс новыми значениями AGP и SDK. - Проверьте веб-сборку:
flutter build web --no-deprecated-js-interopпокажет импорты, которые придётся заменить. - Прогоните
dart migrate --dry-run, чтобы заранее увидеть, что изменится при переходе на следующую версию языка.
Что Flutter 3.50 меняет для бизнеса и продуктовых команд
Вынос Material и Cupertino из SDK означает, что дизайн-компоненты теперь обновляются своим циклом, а не вместе с фреймворком. Для продукта это плюс: исправления в компонентах приходят быстрее. Но в проекте становится больше зависимостей, за которыми нужно следить.
Стабильные FFIgen и JNIgen упрощают работу с нативными SDK платёжных систем, камер и биометрии: меньше прослоек — меньше мест, где что-то ломается. По данным Google, в Google Play опубликовано больше миллиона приложений на Flutter, и миграция коснётся почти каждого из них.
Часто задаваемые вопросы
Перестанет ли собираться старый код после обновления до 3.50? Нет. Встроенные Material и Cupertino объявлены устаревшими, но не удалены: анализатор выдаёт предупреждения, сборка проходит.
Когда встроенные библиотеки уберут окончательно? Точную версию Google не назвала — сказано только, что удаление будет в одном из будущих релизов. Миграцию на material_ui можно было начинать ещё с Flutter 3.47.
Нужно ли переписывать platform channels на FFIgen и JNIgen? Не обязательно, каналы продолжают работать. Переходить имеет смысл там, где важны скорость и синхронные вызовы нативного кода.
Источники
- Flutter Blog — What’s new in Flutter 3.50, 11 ноября 2026 (первоисточник).
- Flutter Docs — Migrate to standalone material_ui and cupertino_ui packages.
- Flutter Docs — Flutter 3.50.0 release notes.
- Very Good Ventures — Flutter 3.50 and Dart 3.14: Key Changes and Migration Steps, 11 ноября 2026 (независимый разбор).
Переведём ваше приложение на Flutter 3.50
Перенесём импорты на material_ui и cupertino_ui, обновим Android-плагины под AGP 9 и встроенный Kotlin, переведём iOS-сборку на Swift Package Manager до заморозки CocoaPods и прогоним регресс на обеих платформах.