Компания Google представила фреймворк построения интерфейса пользователя Flutter 2, который ознаменовал трансформацию проекта из фреймворка для разработки мобильных приложений в универсальный фреймворк для создания любых типов программ, включая программы для настольных систем и web-приложения.
Flutter рассматривается как альтернатива React Native и позволяет на основе одной кодовой базы выпускать приложения для разных платформ, включая iOS, Android, Windows, macOS и Linux, а также приложения для запуска в браузерах. Ранее написанные на Flutter 1 мобильные приложения после перехода на Flutter 2 без переписывания кода смогут быть адаптированы для работы на рабочем столе и в Web.
Основная часть кода Flutter реализована на языке Dart, а runtime-движок для выполнения приложений написан на C++. При разработке приложений, помимо родного для Flutter языка Dart, можно использовать интерфейс Dart Foreign Function для вызова кода на C/C++. Высокая производительность выполнения достигается благодаря компиляции приложений в машинный код для целевых платформ. При этом программу не нужно перекомпилировать после каждого изменения – Dart предоставляет режим горячей перезагрузки, позволяющий вносить изменения в работающее приложение и сразу оценивать результат.
Во Flutter 2 заявлена полноценная поддержка создания приложений для Web, пригодная для рабочих внедрений. Упоминается три основных сценария применения Flutter для Web: разработка обособленных web-приложений (PWA, Progressive Web Apps), создание одностраничных web-приложений (SPA, Single page apps) и преобразование мобильных приложений в web-приложения. Из особенностей средств разработки для Web называется задействование механизмов ускорения отрисовки 2D и 3D-графики, гибкая компоновка элементов на экране и компилируемый в WebAssembly движок отрисовки CanvasKit.
Поддержка приложений для рабочего стола находится на стадии бета-тестирования и будет стабилизирована в этом году в одном из следующих выпусков. О поддержке разработки с использованием Flutter заявили компании Canonical, Microsoft и Toyota. Компания Canonical выбрала Flutter в качестве основного фреймворка для своих приложений и в том числе применяет Flutter при разработке нового инсталлятора для Ubuntu. Компания Microsoft адаптировала Flutter для складных устройств с несколькими экранами, таких как Surface Duo. Компания Toyota планирует использовать Flutter для автомобильных информационно-развлекательных систем. На основе Flutter также построена пользовательская оболочка развиваемой в Google микроядерной операционной системы Fuchsia.
Одновременно опубликован релиз языка программирования Dart 2.12, в котором продолжено развитие кардинально переработанной ветки Dart 2. Dart 2 отличается от изначального варианта языка Dart применением сильной статической типизации (типы могут выводиться автоматически, поэтому указание типов не является обязательным, но динамическая типизация больше не используется и вычисленный изначально тип закрепляется за переменной и в дальнейшем применяется строгая проверка типа).
Выпуск примечателен стабилизацией режима безопасного использования значения “Null” (null safety), который позволят избежать крахов, вызванных попытками использования переменных, значение которых не определено и выставлено в “Null”. Режим подразумевает, что переменные не могут иметь неопределённые значения, если им явно не присваивается значение null. В режиме строго учитываются типы переменных, что позволяет компилятору применять дополнительные оптимизации. Соответствие типов проверяется на этапе компиляции, например, в случае попытки присвоения значения “Null” переменной с типом, не подразумевающим неопределённое состояние, таким как “int”, будет выведена ошибка.
Другим важным улучшением Dart 2.12 стала стабильная реализация библиотеки FFI, позволяющей создавать высокопроизводительный код, из которого можно обращаться к API на языке Си. Внесены оптимизации производительности и размера. Добавлены инструменты для разработчиков и система профилирования кода, написанные с использованием Flutter, а также новые плагины для разработки приложений на Dart и Flutter для Android Studio/IntelliJ и VS Code.