Flutter - это популярный фреймворк для создания мобильных приложений, который постоянно развивается, совершенствуется чтобы радовать разработчиков и удовлетворять всем потребностям.
Бочкарев Константин
https://eagle2000.space/
Предыстория
В нашей компании flutter используется для разработки нескольких приложений. Одно из самых интересных и активно разрабатываемых - Nova Health. Приложение которое помогает следить за здоровьем пользователя, выдавать советы и рекомендации после проведения замеров. В связке с устройством-компаньоном они позволяют заменить несколько приборов, таких как: пульсоксиметр и тонометр, могут выполнять функции портативного домашнего электрокардиографа (ЭКГ).
При разработке такого приложения необходимо держать руку на пульсе и стараться предоставить пользователям продукт с наименьшим количеством багов и тормозов. После небольшого вступления я могу перейти к описанию миграции.
Мы решили не оставаться в прошлом и обновить наш Flutter до последней версии 3.7.3 после конференции Google. Ранее мы жили на версии 2.10.4, но теперь решили, что готовы к новым вызовам и даем себе шанс попробовать все новинки и возможности последнего фреймворка. Я был рад изучить новые возможности и улучшения, которые предлагает эта версия. Сразу скажу, что процесс перехода на новую версию не всегда проходит гладко. Поэтому было решено сначала провести небольшой анализ того, что необходимо будет изменить и обновить, а после приступать к миграции.
Изменения Flutter 3.0
Одно из главных обновлений в Flutter 3.7.3 - это появление Material 3, обновленной системы дизайна для создания мобильных приложений. Material 3 предоставляет новые руководства по дизайну и новые компоненты, такие как переработанные панели приложений, виджеты, плавающие кнопки действий. Эти обновления дают разработчикам большую гибкость и контроль над внешним видом и функциональностью их приложений.
Появился новый виджет Navigation Rail. Я с большим удовольствием попробую его в работе в будущем. Он нужен для более удобной навигации в приложении.
Конечно нельзя забывать об улучшение производительности в flutter 3.7.3 она действительно поразительна. В новой версии улучшена графическая производительность и рендеринг, а значит сократилось количество пропусков кадров в анимациях. Это позволяет создавать еще более высокопроизводительные мобильные приложения. В новой версии улучшена графическая производительность и рендеринг, что приводит к созданию более плавных и отзывчивых пользовательских интерфейсов, делая работу пользователя намного приятнее.
Еще одной интересной особенностью flutter 3.7.3 является новая поддержка Dart FFI (Foreign Function Interface). Это позволяет разработчикам писать код на языке C, который может быть использован в приложениях flutter. Это открывает совершенно новый мир возможностей для разработчиков, которым необходимо интегрироваться с существующими библиотеками C или которые хотят использовать преимущества низкоуровневого программирования для повышения производительности своих приложений. Добро пожаловать в интеграцию с rust и golang. Теперь появилась возможность вызова ios библиотек напрямую не прибегая к platform channels.
Сократился размер конечного приложения и открылся мир к новым версиям библиотек сторонних разработчиков. Нас ждет переход на Bloc 8, новую версию freezed, обновление внутренних библиотек для оптимизации работы, внедрение автотестов в наш рабочий пайплайн.
Путь к обновлению
Первое это изменение версии в flutter version manager (FVM). Данная утилита позволяет быстро переключать версию фреймворка в зависимости от проекта над которым работаешь. После изменения версии и скачивания flutter 3.7.3 vscode запестрел красными уведомлениями и конечно ни о какой сборке речи быть не могло. Нужно было это все фиксить. Одним из неприятных ломающих изменений является отказ команды flutter в классе WidgetsBinding.instance от null. Думаю многим авторам плагинов это сообщение подпортило настроение - Operand of null-aware operation '!' has type 'WidgetsBinding' which excludes null. Подробное описание всех ломающих изменений легко потянет на еще одну статью поэтому просто произнесем “a few moments later” и красные уведомления больше не беспокоят.
Перехожу следующему шагу. В нашей компании для процесса непрерывной интеграции и непрерывного развертывания (CI/CD) используется gitlab. Когда в ветку develop попадает очередной коммит запускается пайплайн который стартует сборку приложения для передачи бравому отделу тестирования. Под android приложение собирается в docker контейнере на linux сервере. Этот контейнер было необходимо обновить. У гугл не бывает простых миграций. Если они что-то обновляют, то это будет обязательно несовместимо с прошлой версией. В данном случае изменились утилиты sdk и также поменялись их пути. Open JDK, Gradle тоже не могли оставаться на прошлой версии и их пришлось обновить. Все это требовало нескольких часов перезапуска, отладки. А также сам образ необходимо было уменьшить чтобы gitlab был способен его быстро подгрузить. Версия под iOS собирается на отдельной машине под управлением macos. На этой стороне нужно было провести несколько изменений чтобы сборка проходила как по маслу. Я также решил что пора подключить App Store Connect API чтобы не приходилось каждый раз проходить двухфакторную аутентификацию. Благодаря удобному инструменту fastlane это сделать достаточно легко. Оставлю ссылку на доку.
После некоторых танцев под звон веселого бубна (разборка с зависимостями в библиотеках) приложение вновь стало собираться и миграция была успешно завершена. А теперь я кратко расскажу почему же стоит переходить на версию 3.7.3 и выше.
Некоторые улучшения
Новая версия Flutter также включает несколько улучшений для функций доступности (accessibility) фреймворка. Среди них новые виджеты accessibility и улучшения семантического дерева, что облегчает создание приложений, доступных для пользователей с ограниченными возможностями.
В плане исправления ошибок, Flutter 3.7.3 устраняет несколько критических ошибок и проблем, которые присутствовали в предыдущих версиях фреймворка. Среди них улучшения для движка рендеринга текста, уменьшение времени сборки приложения, исправления функции горячей перезагрузки и улучшения способа которым Flutter обрабатывает загрузку и кэширование изображений.
В целом, Flutter 3.7.3 - это значительное обновление, которое приносит множество новых увлекательных функций и улучшений. Если вы разработчик на Flutter, то обновление до этой последней версии - неотъемлемая часть процесса. Язык dart также постоянно эволюционирует и развивается. В ближайшее время появится новая версия dart 3 которая принесет новую функциональность в язык: records и patterns (знаменитый pattern matching из других языков), а также множество улучшений о которых пишут инженеры гугл у себя на площадках.
Flutter - это фреймворк, который помогает поднять вашу разработку мобильных приложений на новый уровень. Так что, почему бы не попробовать и убедиться самому, насколько это может ускорить ваш рабочий процесс и помочь вам создавать еще более крутые мобильные приложения.