Горячая перезагрузка для веба, нативная точность и глубокие интеграции
Введение
Добро пожаловать во Flutter 3.32! Этот релиз наполнен функциями, призванными ускорить вашу разработку и улучшить ваши приложения. Приготовьтесь к горячей перезагрузке (hot reload) для веба, потрясающим "сквирклам" (squircles) в стиле Cupertino для нативной точности и мощным новым интеграциям с искусственным интеллектом через Firebase. С 1024 коммитами от 156 уникальных участников, включая 39 новичков, Flutter 3.32 является свидетельством невероятной работы нашего сообщества. Давайте посмотрим, что нового!
Веб
Горячая перезагрузка для веба (Экспериментально)
Мы рады сообщить, что теперь вы можете использовать горячую перезагрузку для веба! Поддержка горячей перезагрузки для веба — это вторая по популярности проблема в трекере Flutter. Мы рады дать вам возможность опробовать ее в своих проектах! Нам нужна ваша помощь, чтобы убедиться, что эта захватывающая новая функция имеет все, что от нее хотят разработчики.
Если вы обнаружите какие-либо проблемы, сообщите об ошибке, используя шаблон Dart Web Hot Reload. Вы можете найти список известных проблем в проекте GitHub Web Hot Reload Known Issues.
Теперь самое интересное: как использовать эту функцию.
Мы добавили простой флаг командной строки --web-experimental-hot-reload
, который вы можете передать Flutter везде, где вызываете flutter run
.
Запуск из VS Code
Если вы используете конфигурации отладки в VS Code, вы можете добавить эту дополнительную конфигурацию в ваш файл launch.json
:
JSON
"configurations": [
…
{
"name": "Flutter for web (hot reloadable)",
"type": "dart",
"request": "launch",
"program": "lib/main.dart",
"args": [
"-d",
"chrome",
"--web-experimental-hot-reload",
]
}
]
Для достижения наилучших результатов мы рекомендуем включить настройку «Dart: Flutter Hot Reload On Save» в VS Code. Горячую перезагрузку также можно запустить с помощью значка ⚡️ на панели Run/Debug. Горячий рестарт (Hot restart) по-прежнему можно запустить с помощью кнопки ⟳.
Запуск из командной строки
Если вы используете flutter run
в командной строке, теперь вы можете запустить горячую перезагрузку для веба следующим образом:
Bash
flutter run -d chrome --web-experimental-hot-reload
Когда горячая перезагрузка включена, вы можете перезагрузить приложение, нажав «r» в запущенном терминале, или «R» для горячего рестарта.3
Перезагрузка в DartPad
Горячая перезагрузка теперь также доступна в DartPad с новой кнопкой Reload
. Эта функция доступна только в том случае, если в работающем приложении обнаружен Flutter. Вы можете попробовать ее, используя пример приложения, предоставленный DartPad.
Спасибо, что помогаете нам сделать горячую перезагрузку для веба потрясающей!
Фреймворк
Мы продолжили нашу работу по переносу логики из библиотеки Material в библиотеку widgets.
Этот релиз представляет новый виджет Expansible
, который упрощает создание виджетов, расширяющихся и сворачивающихся с различными визуальными темами. Этот новый виджет служит основной строительной единицей для ExpansionTile
в стиле Material.
Еще одним ценным дополнением в этом релизе является RawMenuAnchor
, созданный участником сообщества @davidhicks980. Этот виджет теперь служит основной строительной единицей для MenuAnchor
в стиле Material, открывая путь для создания меню с разнообразными визуальными темами. Более того, RawMenuAnchor
можно использовать независимо как меню без стиля, предоставляя вам полный контроль над его внешним видом.
Подобные рефакторинги обеспечивают лучшую поддержку основных виджетов для использования в реализации языков дизайна, таких как Cupertino и Material (и других!), с более последовательными поверхностями и совместным использованием кода.
Cupertino
Сквирклы (Squircles)
Мы рады представить значительное новое дополнение к возможностям форм во Flutter: закругленный суперэллипс.
Часто называемая «сквирклом Apple», эта форма является краеугольным камнем языка дизайна iOS, известного своими более плавными и непрерывными кривыми по сравнению с традиционными закругленными прямоугольниками. Поддержка этой формы была частым запросом от сообщества Flutter. Ее включение представляет собой еще один шаг в наших усилиях по обеспечению высококачественного пользовательского интерфейса с нативным внешним видом на платформах Apple.
И CupertinoAlertDialog
, и CupertinoActionSheet
были обновлены для использования этой новой формы!
Вы можете добавлять закругленные суперэллипсы в свои приложения, используя эти новые API:
RoundedSuperellipseBorder
для рисования или как форма виджета.4ClipRSuperellipse
для обрезки.Canvas.drawRSuperellipse
,Canvas.clipRSuperellipse
иPath.addRSuperellipse
для API нижнего уровня, которые предлагают более прямой контроль.
Обратите внимание, что закругленный суперэллипс находится в активной разработке. В настоящее время он поддерживается только на iOS и Android, в противном случае поведение возвращается к стандартному закругленному прямоугольнику. Также продолжается работа по оптимизации производительности. Мы призываем вас изучить эту новую функцию с учетом этих соображений и с нетерпением ждем расширения ее возможностей в будущих обновлениях!
Модальные окна (Sheet)
Было также решено несколько проблем с модальными окнами Cupertino, включая исправление того, как окно устанавливает тему системного интерфейса при открытии на Android.
Окно было скорректировано, чтобы исправить высоту навигационной панели и гарантировать, что контент не обрезается снизу. Следующий скриншот демонстрирует изменения до и после.
(Изображение: Сравнение окна Cupertino до и после исправления)
Другие исправления в этом релизе включают проблему, из-за которой переход окна был несовместим с PopupMenuButton
, а переход закругленных углов окна был улучшен, чтобы выглядеть правильно на большем количестве устройств. Ранее он выглядел некорректно на некоторых экранах с разными радиусами углов.
Теперь вы также можете использовать новый аргумент enableDrag
в CupertinoSheetRoute
и showCupertinoSheet
, чтобы отключить поведение закрытия нижнего модального окна Cupertino с помощью перетаскивания вниз (#163923).
Навигационные панели
CupertinoSliverNavigationBar.search
получил улучшения точности анимации при открытии или закрытии вида поиска, а также правильное выравнивание иконок префикса и суффикса поля поиска.
Наконец, переход между маршрутами с CupertinoNavigationBars
или CupertinoSliverNavigationBars
был обновлен, чтобы соответствовать последним переходам iOS (#164956).
Material
Этот релиз приносит ряд улучшений функций и исправлений ошибок в библиотеку Material, улучшая как функциональность, так и опыт разработчиков.
Улучшения функций включают:
CarouselController
предоставляет более удобный методanimateToIndex
, позволяющий плавно перемещаться по каруселям на основе индекса, будь то с элементами фиксированного или динамического размера с использованиемflexWeights
.TabBar
теперь имеет колбэкиonHover
иonFocusChange
, предоставляя вам больше контроля над внешним видом виджета в различных состояниях.5SearchAnchor
иSearchAnchor.bar
теперь включают колбэкиviewOnOpen
иonOpen
соответственно, что позволяет лучше отслеживать и обрабатывать события открытия/закрытия.6CalendarDatePicker
теперь принимаетcalendarDelegate
для интеграции пользовательской логики календаря, выходящей за рамки григорианской календарной системы. Пример демонстрирует гипотетическую календарную систему, где четные месяцы имеют 21 день, нечетные — 28 дней, и каждый месяц начинается с понедельника, показывая гибкость, которую предлагает этот делегат.
Другие незначительные улучшения включают добавление animationStyle
в showDialog
, showAdaptiveDialog
и DialogRoute
для настройки анимации при открытии и закрытии диалогового окна; Divider
теперь принимает borderRadius
для настройки границы разделителя, особенно когда разделитель толстый.7
Помимо новых функций, этот релиз также исправляет несколько ошибок, связанных с DropdownMenu
и Sliders
в библиотеке Material:8
Виджет
DropdownMenu
теперь позволяет ширине своего меню быть меньше, чем у текстового поля. Пример был обновлен, чтобы исправить предыдущую ошибку переполненияRenderFlex
. ШиринаDropdownMenu
по умолчанию теперь учитывает ширину текстовой метки в текстовом поле.При наведении курсора на ползунок
RangeSlider
появляется только наложение наведенного ползунка. Ранее некорректно отображались оба наложения. ПолзунокSlider
теперь может достигать обоих концов дорожки, когда цвет дорожки прозрачен, преодолевая предыдущее ограничение, когда это было невозможно.
Доступность (Accessibility)
Оптимизированная компиляция дерева семантики
Эта функция сократила время компиляции семантики примерно на 80%. Во Flutter для веба это означает 30% сокращение времени кадра при включенной семантике.
Введение детальных семантических ролей
Новый API SemanticsRole
был интегрирован в виджет Semantics
и связанные с ним компоненты, предлагая разработчикам более точный контроль над тем, как элементы пользовательского интерфейса интерпретируются вспомогательными технологиями.9 Это улучшение позволяет назначать определенные роли всему поддереву виджетов, просто обернув его виджетом Semantics
, настроенным с нужной ролью.
Список доступных ролей подробно описан в официальной документации API. В настоящее время эта расширенная функциональность семантических ролей доступна для веб-приложений, поддержка других платформ появится в будущих релизах.
Для получения дополнительной информации см. Улучшение доступности с помощью семантических ролей.
Другие улучшения доступности
Улучшенный пользовательский опыт для виджетов и программ чтения с экрана: Улучшена поддержка доступности и пользовательский опыт для различных виджетов, включая текстовые поля, управление фокусом, меню, ползунки и выпадающие списки. Программы чтения с экрана теперь предоставляют более описательную обратную связь, когда пользователи взаимодействуют с этими элементами.
Более плавная навигация по фокусу в вебе с семантикой: Уточнено поведение фокуса в вебе при включенной семантике, что значительно сокращает резкие скачки фокуса между виджетами для более интуитивного навигационного опыта.
Улучшенное распознавание ссылок для Android TalkBack: Android TalkBack теперь правильно определяет и объявляет ссылки, определенные с помощью
Semantics.linkUrl
или виджетаLink
из пакетаurl_launcher
.Поддержка режима высокой контрастности Windows во Flutter для веба: Введена поддержка режима «принудительных цветов» Windows (часто используемого в сценариях высокой контрастности).10 Разработчики теперь могут установить булево значение
useSystemColors
вThemeData
, чтобы автоматически применять системные цвета к темам Flutter, улучшая видимость для пользователей, которые полагаются на эти настройки.11Уточненный опыт iOS Voice Control: Улучшен пользовательский опыт для iOS Voice Control, гарантируя, что неинтерактивные виджеты больше не отображают ненужные метки, что приводит к более чистому и сфокусированному взаимодействию для пользователей.
Ввод текста
Ввод текста получил несколько улучшений в этом релизе:
Запущено системное контекстное меню выбора текста на iOS, о чем говорится в разделе iOS ниже.
Макет опций виджета
Autocomplete
был перенесен наOverlayPortal
, что улучшило производительность и исправило ошибки макета.12Теперь можно настраивать поведение
onTapUpOutside
в текстовых полях (#162575).Разработчики теперь могут генерировать любой виджет в качестве сообщения об ошибке для
FormField
вместо простого текста ошибки (#162255).Выделяемый текст во Flutter стал менее подвержен ошибкам (#162228) и более производительным в вебе (#161682).
Прогресс в поддержке нескольких окон
Участники из Canonical достигли отличного прогресса в предоставлении возможности десктопным приложениям иметь несколько окон!
Canonical исправила несколько функций, которые были сломаны, когда у приложения было несколько окон:
Доступность: #164577
Уведомления о жизненном цикле приложения: #164872
Фокус: #164296
События мыши: #163855
Canonical также добавила функцию, которая позволяет коду Dart FFI напрямую взаимодействовать с движком Flutter (#163430). Это закладывает основу для будущих API окон Flutter.
Наконец, Canonical представила поток растеризации (raster thread) в Linux (#161879). Это улучшает пропускную способность кадров, гарантируя, что Flutter Linux остается "маслянисто гладким" (buttery smooth), даже если у вас несколько окон.
Слияние потоков на десктопе
Canonical также обновила Windows и macOS, чтобы позволить приложениям объединять поток пользовательского интерфейса (UI) и поток платформы (#162883, #162935).
Объединенные потоки позволяют использовать Dart FFI для взаимодействия с нативными API, которые должны вызываться в потоке платформы. Например, если вы включите объединенные потоки в Windows, вы сможете использовать Dart FFI для изменения размера окна вашего приложения с помощью API win32!
В Windows вы можете включить объединенные потоки, добавив следующее в ваш файл windows/runner/main.cpp
, внутри метода wWinMain
:
C++
project.set_ui_thread_policy(UIThreadPolicy::RunOnPlatformThread)
В macOS вы можете включить объединенные потоки, добавив следующее в ваш файл macos/Runner/Info.plist
, внутри элемента <dict>
:
XML
<key>FLTEnableMergedPlatformUIThread</key>
<true />
В будущем релизе мы включим объединенные потоки по умолчанию в Windows и macOS. Пожалуйста, попробуйте это и создавайте issues, если столкнетесь с какими-либо ошибками!
iOS
Мы улучшили опыт вставки в приложениях Flutter на iOS! Для базовых текстовых полей без пользовательских действий пользователи больше не будут видеть диалоговое окно подтверждения при вставке контента из других приложений. Это теперь включено по умолчанию во всех приложениях Flutter для iOS. Обратите внимание, если ваше приложение использует пользовательские действия (например, «Отправить электронное письмо» в контекстных меню), эта функция пока не поддерживается.
Android
Переписывание инструментов Gradle на язык Kotlin
Плагин Flutter Gradle был преобразован с Groovy на Kotlin.13 Этот переход на Kotlin упрощает участие в разработке кодовой базы, а также облегчает внедрение модульных тестов для плагина. Добавленные тесты, а также переход от динамически типизированного и исполняемого языка к статически типизированному, должны привести к более стабильному и надежному процессу сборки для разработчиков Flutter. Мы не ожидаем никаких изменений в поведении в результате переписывания, поэтому, пожалуйста, сообщите о проблеме, если заметите, что сборки Android ведут себя иначе, чем вы ожидали.
Поддержка Scribe / Стилуса
Теперь вы можете использовать стилус для письма в текстовых полях на Android так же, как уже работает ввод рукописного текста Apple Pencil в приложениях Flutter для iOS. Пользователи могут начать писать прямо поверх любого поля ввода текста Flutter, и рукописный ввод будет отображаться как текст в поле. Пока поддерживаются не все жесты, но мы работаем над устранением этих пробелов. Эта функция поддерживается на Android 14 и выше и может быть отключена, при необходимости, с помощью параметров TextField.stylusHandwritingEnabled
или CupertinoTextField.stylusHandwritingEnabled
.
Движок (Engine)
Impeller на Android
Начиная с релиза 3.29.3, на устройствах с Android API уровня 28 (Android 9) и старше, приложения Flutter будут использовать устаревший рендерер Skia. Это изменение улучшает стабильность Flutter на старых устройствах Android. Impeller продолжает оставаться рендерером по умолчанию на устройствах с API уровня 29 (Android 10) и новее.
По мере получения большего количества отзывов от пользователей, использующих разные устройства, мы скорректировали, какие устройства используют бэкэнд Vulkan от Impeller, а какие — OpenGLES. В частности, в этом релизе следующие устройства будут использовать OpenGLES вместо Vulkan: эмулятор Android, устройства MediaTek с версией API менее 31, устройства PowerVR старше CXT и старые версии графических процессоров Samsung XClipse, которые не поддерживают Vulkan 1.3.
Как и в предыдущих релизах, вы можете отказаться от использования Impeller, следуя этим инструкциям. Из-за нашей растущей уверенности в стабильности и производительности Impeller, возможность отказа от Impeller на новых устройствах Android будет удалена в одном из следующих стабильных релизов.
Наконец, Flutter 3.27 имеет ряд ошибок рендеринга и сбоев, связанных с рендерингом Impeller на устройствах с поддержкой Vulkan, которые исправлены в версиях 3.29 и более поздних. Мы не планируем выпускать исправления (hotfix) для 3.27 и настоятельно рекомендуем обновиться до 3.29 или более поздней версии. Если ваше приложение не может этого сделать, мы рекомендуем отказаться от Impeller на устройствах Android.
Другие обновления Impeller
Этот релиз улучшает рендеринг текста в Impeller. В частности, текстовые анимации стали плавнее с меньшим количеством дрожания благодаря глифам более высокого разрешения в атласе глифов Impeller и исправлению ошибок округления в вычислениях с плавающей запятой. Более подробную информацию можно найти в flutter#149652.
(Изображение: Сравнение рендеринга текста до и после)
Этот релиз также включает множество других улучшений точности и производительности, в том числе:
Конические кривые больше не аппроксимируются, а тесселируются напрямую.
Частичная перерисовка была оптимизирована для избежания частого выделения памяти.
Скорость размытия была улучшена за счет удаления избыточных вложений.
Исправлена ориентация текста, повернутого ровно на 180 градусов.
DevTools и IDE
[Новинка] Редактор свойств Flutter (Flutter Property Editor)
Легко редактируйте свойства виджетов и читайте документацию с помощью нового инструмента Property Editor, доступного на боковой панели Flutter Property Editor (VS Code) или в окне инструментов (Android Studio / IntelliJ).14
(Изображение: Редактор свойств Flutter в VS Code)
(Изображение: Редактор свойств Flutter в Android Studio & IntelliJ)
Улучшения DevTools
Были сделаны дополнительные улучшения в DevTools, включая новую офлайн-поддержку для экрана Network, исправления ошибок, связанных с историей ревью, ошибками инспектора, инструментом Deep Links, и улучшения данных для экранов CPU Profiler и Memory. Этот релиз также включает несколько улучшений производительности и использования памяти для DevTools, что приведет к ускорению загрузки данных и уменьшению сбоев, связанных с памятью.
Это лишь некоторые из основных моментов этого релиза. Чтобы узнать больше обо всех обновлениях, включенных во Flutter 3.32, ознакомьтесь с примечаниями к релизу DevTools 2.44.0 и 2.45.0.
Улучшения анализатора
Мы продолжили вносить улучшения в анализатор Dart, а следовательно, и в опыт разработчиков. Это включает добавление «doc imports» — нового синтаксиса на основе комментариев, который позволяет ссылаться на внешние элементы в комментариях к документации, фактически не импортируя их.15 Ознакомьтесь с подробностями на dart.dev. Мы также сделали несколько улучшений быстрых исправлений (quick fix), вспомогательных действий (assist) и переименования.
Gemini в Android Studio теперь свободно говорит на Flutter и Dart
Gemini в Android Studio теперь предлагает первоклассную поддержку для разработки на Dart и Flutter! Это означает, что вы можете использовать мощь Gemini прямо в вашей любимой IDE, чтобы создавать красивые, высокопроизводительные приложения Flutter быстрее и проще, чем когда-либо прежде.
Прочтите этот пост в блоге, чтобы узнать больше.
Поддержка Model Context Protocol (MCP) для Dart и Flutter уже в пути
Активно ведется работа над поддержкой Model Context Protocol (MCP) и недавно опубликованного Dart MCP SDK. Новый Dart Tooling MCP Server, также находящийся в разработке, будет предоставлять статические, рантайм- и экосистемные инструменты Dart и Flutter клиентам MCP, таким как IDE.
Это принесет следующие преимущества разработчикам Dart и Flutter:
Более точная и релевантная генерация кода.
Сложные задачи — такие как исправление проблем с макетом, управление зависимостями или даже разрешение ошибок времени выполнения — становятся выполнимыми, поскольку протокол MCP предоставляет семантическую информацию из фактических инструментов Dart и Flutter.
Следите за новостями!
Создавайте с помощью ИИ (Build with AI)
Представляем Firebase AI Logic
Возможно, вы слышали или даже использовали Vertex AI в Firebase, наш клиентский SDK для прямой интеграции функциональности на основе Gemini API в ваше приложение Flutter.16
Многие из вас просили использовать Gemini Developer API вместо Vertex AI, чтобы воспользоваться щедрым бесплатным уровнем и начать добавлять генеративный ИИ бесплатно. Мы вас услышали! С сегодняшнего дня мы развиваем Vertex AI в Firebase до Firebase AI Logic, который предоставляет доступ к обоим провайдерам Gemini API с помощью всего одного Flutter SDK.17 Он позволяет использовать модели Gemini и Imagen непосредственно из вашего приложения Flutter, без необходимости в серверном SDK.
Ознакомьтесь с пакетом firebase_ai
для получения новой функциональности. Если вы уже используете пакет firebase_vertexai
, он пока будет работать как есть, но мы рекомендуем вам перейти на новый пакет.
Получайте действенные инсайты с помощью панели AI Monitoring
Новая панель AI Monitoring в консоли Firebase предоставляет подробные, действенные инсайты об использовании вами Gemini API.18 Это включает в себя всестороннюю видимость шаблонов потребления, показателей производительности и потенциальных проблем. Это позволяет принимать решения на основе данных и гарантирует, что вы используете Gemini API наиболее эффективным способом. AI Monitoring также помогает отлаживать использование Gemini API, а также выявлять и устранять любое неожиданное поведение.
Критические изменения и устаревшие функции
Объявления доступности Android
На Android семантические события объявлений теперь устарели, начиная с API 36. Вместо этого используйте «вежливые» (polite) неявные объявления, настроив SemanticProperties.liveRegion
. В настоящее время существует известное ограничение при объявлении текста, который не должен быть фокусируемым. См. issue #165857 для получения подробной информации об этом ограничении и планах по его устранению. Чтобы увидеть альтернативные решения, ознакомьтесь с документацией по SemanticService.announce.
Прекращена поддержка 6 пакетов
Как мы планировали и сообщали в нашем посте в блоге о релизе Flutter 3.29, мы прекратили поддержку следующих пакетов:
flutter_markdown
; см. flutter_markdown planned to be discontinued #162966ios_platform_images
; см. ios_platform_images planned to be discontinued #162961css_colors
; см. css_colors planned to be discontinued #162962palette_generator
; см. palette_generator planned to be discontinued #162963flutter_image
; см. flutter_image discontinued #162964flutter_adaptive_scaffold
; см. flutter_adaptive_scaffold planned to be discontinued #162965
Мы призываем членов сообщества обращаться к обсуждениям в каждой из проблем для поиска альтернатив.
Минимальные версии iOS и macOS
Flutter прекратит поддержку iOS 12 и macOS 10.14 (Mojave) в следующем стабильном релизе и будет ориентироваться на минимум iOS 13 и macOS 10.15 (Catalina). Это означает, что приложения, созданные на основе будущих версий Flutter, не будут работать на iOS 12 или macOS 10.14.
Другие критические изменения
Другие критические изменения и устаревшие функции в этом релизе включают:
Устарел
ExpansionTileController
в Material в пользу нового многоразовогоExpansibleController
в слое Widgets.Переименован
SelectionChangedCause.scribble
(который устарел) вSelectionChangedCause.stylusHandwriting
, так как функция Scribble от Apple теперь унифицирована с Scribe от Android.В рамках нашей продолжающейся работы по нормализации тем Material,
ThemeData.indicatorColor
устарел в пользуTabBarThemeData.indicatorColor
, в то время как типы тем компонентов дляcardTheme
,dialogTheme
иtabBarTheme
должны быть перенесены наCardThemeData
,DialogThemeData
иTabBarThemeData
соответственно.19Формула для
SpringDescription
в некоторых поведениях была исправлена. Это изменение исправляет проблему, из-за которой поведение для некоторых комбинаций параметров не соответствовало ожидаемой физике реального мира и демонстрировало разрывы вблизи точки критического затухания. Это изменение затрагивает недозатухающие пружины (коэффициент затухания менее 1) со значениями массы, отличными от 1. Такие пружины, созданные до этого изменения, могут демонстрировать другое поведение отскока после обновления. Чтобы восстановить предыдущее поведение анимации, обновите параметры пружины в соответствии с руководством по критическому изменению Spring Description Underdamped, где вы также можете найти инструмент, который рассчитывает корректировки параметров.
Чтобы увидеть руководства по миграции для всех устаревших или критических изменений в этом релизе, см. страницу критических изменений. Запуск dart fix
после обновления автоматически перенесет некоторые из этих изменений за вас.
Заключение
Flutter 3.32 знаменует собой еще один шаг вперед, движимый невероятной самоотдачей нашего сообщества. Мы рады представить вам такие функции, как горячая перезагрузка для веба и постоянные улучшения платформ. Ваш вклад бесценен, и мы не можем дождаться, чтобы увидеть, что вы создадите. Для полного обзора ознакомьтесь с подробными примечаниями к релизу и журналом изменений. Чтобы начать, просто выполните flutter upgrade
и погрузитесь в последнюю версию!
ExternalWayfarer
Что вообще такое этот ваш флутер? Полезная штука? Никогда не пользовался.
lil_master Автор
Коротко: очень крутая штука. Точка пересечения высокой производительности, кроссплатформенности и скорости разработки.
milkyway044
Либо используешь Flutter, либо переписываешь один и тот же экран на Swift, Kotlin, C#, JS и ещё бог знает чём.
codecity
Ну чего, Compose Multiplatform уже постепенно подтягивается и позволяет делать все то же самое практически.
Anfet
Вот только совсем не так просто - это раз. И пока очень мало библиотек - это два. Плюс хромают бест практики. Во флаттер реально очень быстро войти, очень просто освоится. А вот кмп, мне, Легаси дроид разрабу кажется странным и монструозным. Уж как есть.
При том, что флаттер с полпинка заводится на винде, и с пары пинков на вебе. И все это на единой кодовой базе.
Чтобы добить, можно вспомнить skia, от которой флаттер отказывается уже, а кмп на ней все только начинает делать.
lil_master Автор
1) В этом и смысл, даже если, Compose Multiplatform уже постепенно подтягивается и позволяет делать все то же самое практически, зачем это нужно? Зачем создавать flutter 2 на котлине, если это всё уже есть во Flutter?
2) Compose Multiplatform уже стабильно работает под экосистему эпл? https://habr.com/en/companies/kts/articles/907678/
Это только начало, а потом пойдет длительный и нудный путь исправления багов, путь на котором компоуз в самом начале, а флаттер близко к финишу.
+ Порог входа Дарта и Котлина для новичков учитывайте
Поэтому пожалуйста, не сравнивайте ещё не готовый инструмент с более высоким порогом входа с уже готовым инструментом, который уже довольно стабильно живёт в продакшене.
codecity
Но тут и другой нюанс - на Kotlin уже на сегодня больше людей умеют писать - 0.72% против 0.46%. Т.е. им будет проще перейти, чем учить новый (пусть даже более простой) - а ведь бизнес требует кросс-платформу вот уже.
Узнать об этом сможет лишь тот, кто попытается сделать приложение и опубликовать в маркете. Хотите быть пионером?
black_list_man
Qt/QML тоже не плох
codecity
QT не плох, а вот QML всем плох (его не любят даже QT-шники заядлые, и те предпочитают Qt Widgets). Вы пишите UI на JS фактически да еще и в олдскульном концепте. Еще есть React Native, если JS не проблема.
codecity
Фреймворк для кросс-платформенных приложений, который работает. Поддержка Windows, Android, iOS, MacOS, Linux, Web. Пишите один раз - используете везде, мечта прямо.