Используем Dart для быстрой и кроссплатформенной разработки eHealth-сервиса Medcorder

Roman Biriukov
Заметки про Evrone
5 min readOct 5, 2020

Ещё один медицинский кейс о том, как мы успешно создали eHealth сервис на новой для себя технологии.

Команда специализируется как на разработке сложных и высоконагруженных проектов для крупных компаний, так и быстром запуске стартапов, используя при этом стабильные технологии. Наши инженеры постоянно следят за изменениями в технологиях и стараются внедрять те из них, которые показывают хороший результат. Так стек технологий был пополнен языком Dart и фреймворком Flutter, которые мы применили при создании медицинского приложения для мобильных телефонов.

От заказчика поступила задача на разработку приложения, которое позволяет более качественно построить общение между врачами и их пациентами. Идею создания этого стартапа продиктовала ему жизнь.

У нашего клиента серьёзно заболел отец. Семья тонула в огромном объеме информации о возможном лечении. Чтобы не упустить важных деталей во время консультаций, разговоры с врачами записывались на диктофон. Записи рассылались по электронной почте членам семьи для обсуждения и принятия решения о лечении. Такой подход для формирования «команды здоровья» оказался весьма эффективным и у нашего заказчика созрела идея создать приложение, которое автоматизирует все процессы.

Действительно, многие люди в процессе общения с врачом не могут с ходу осмыслить ту информацию, которую им сообщают, запомнить детали, рекомендации по лечению, точно пересказать услышанное близким людям, не запутавшись в терминах.

Чтобы помочь отцу заказчика и всем другим людям в подобной ситуации, и был создан Medcorder.

Выбор технологий

Нам предстояло создать концепт приложения, его дизайн и разработать MVP.

Заказчик предложил использовать стек Google (Google Cloud, Google Firebase, Google Storage, Google Speech Recognition) и новый инновационный кроссплатформенный фреймворк для разработки мобильных приложений — Google Flutter.

Знакомство с Flutter

Flutter — это достаточно молодой SDK от Google с открытым кодом для создания мобильных приложений под IOS и Android. Используется язык Dart, который компилируется в бинарный платформенный код, и за счет этого приложения показывают высокую производительность.

До проекта Medcorder у нас был большой опыт разработки на React Native, поэтому идею создать продукт на мультиплатформенном фреймворке мы посчитали очень удачной. Заказчику была важна скорость реализации и гибкость к изменениям, поэтому фреймворк — это то, что нужно.

К моменту старта проекта Flutter находился в стадии Pre-alpha, что несло дополнительные сложности и риски, но мы загорелись новой технологией и идеей, согласились на вызов и начали работу.

В процессе работы Flutter очень динамично рос и менялся. Отдельным кунг­-фу было поддерживать инструментарий актуальным. Хорошо, что Инженеры Google сразу поставили цель максимально снизить порог входа в платформу, тщательно поработали над документацией и ресурсами для разработчиков.

В документации есть специальные разделы, в которых можно начать знакомство с платформой в соответствии со своей специализацией.

  • Flutter for Android developers
  • Flutter for iOS developers
  • Flutter for React Native developers
  • Flutter for Xamarin.Forms developers
  • Flutter for Web developers

Это помогает провести аналогии, на живых примерах настроиться на новый лад.

За время разработки Flutter прошел путь от Pre-alpha до Release Candidate, который вышел в начале декабря 2018 года. Апгрейд на новые версии инструментария проходил достаточно сложно. И здесь нам очень пригодился опыт создания нативных мобильных приложений, так как разрешить некоторые зависимости можно было только хорошо понимая работу Gradle для Android и CocoaPods для IOS.

Сообщество и решение проблем

Из-­за молодости SDK возникало много проблем, в которые приходилось глубоко вникать. Сперва мы придумывали решения сами, но ситуация с сообществом менялась в лучшую сторону прямо на глазах.

Сообщество росло, многие ответы появлялись на Stack Overflow, или прямо в Issues на GitHub. Выходили новые модули и плагины, в том числе официальные от Google. Проблемы стало решать намного проще.

Интерфейс

Из коробки Flutter поддерживает 2 базовых варианта: компонент Material Design Widgets и Cupertino Widgets (виджеты в стиле iOS). Наш интерфейс был ближе к Material, поэтому от него и отталкивались.

Во Flutter всегда можно реализовать свои кастомные UI. Уже после нескольких недель знакомства с фреймворком стало понятно, что разработка UI очень быстрая, если не брать во внимание слишком специфические штуки, например кастомный скроллинг.

Этапы разработки

Первая MVP была похожа на умную записную книжку, где пользователь мог сделать аудиозапись своей беседы с доктором, получить текстовую расшифровку разговора, оставлять записи и пометки, разместить фотографии результатов анализов.

На втором этапе разработки личная записная книжка трансформировалась в платформу, где уже могли общаться все участники процесса: пациент, доктор, члены семьи. Плюс был разработан новый концепт и дизайн.

Сейчас мы приступили к разработке версии платформы 2.0 и скоро выпустим ее.

Open Source

Очень радует, что Flutter — это open source. А значит, количество готовых решений увеличивается и их можно будет использовать в своих проектах. Мы уже внесли свой вклад.

В самом начале работы над проектом готовых плагинов для записи и проигрывания аудио еще не было. Мы создали свой на Objective C (iOS) и Java (Android).

Наш плагин Custom Audio Plugin теперь доступен для всех.

Где найдет применение Flutter

Прежде всего мы рекомендуем использовать Flutter для создания MVP стартапов, когда надо быстро проверить бизнес-модель. Приложение на Flutter пишется действительно быстро. Надо учесть, что использование предлагаемых из коробки Material Design и Cupertino Widgets ограничивает дизайн, но в то же время позволяет быстро проводить эксперименты с построением интерфейса и безболезненно отказываться от неудачных решений.

Отметим ряд плюсов Flutter:

  • Приложения работают быстро, так Google добился высокой скорости рендеринга.
  • В приложениях единая кодовая база iOS + Android, а это значит, что при правках не надо выполнять двойную работу.
  • Приложение выглядит нативно и абсолютно идентично на платформах Android и IOS. Это позволяет избежать двойной проработки сценариев взаимодействия с пользователями. Но можно и реализовать интерфейс под каждую из платформ.
  • Приложение легко интегрировать с Google Services и Google Cloud, если есть такая потребность.
  • Для разработчиков есть очень крутые инструменты на базе Android Studio и Visual Studio Code, отличная документация.

Если необходимо реализовать проект с идентичным функционалом Web и Mobile, то для этой цели оптимальным выбором может быть ReactNative или Progressive Web Apps, так как Flutter не работает с web. Но это дело времени, Google уже объявил о поддержке web в проекте Hummingbird.

Flutter, как и другие кроссплатформенные инструменты, не решает специфические для системы задачи, такие как управление контактами, bluetooth, работа со звуком, отправка SMS. Для этого придется искать или самостоятельно писать плагины. Но с учетом того, что сообщество разработчиков Flutter растёт и отдает свои наработки в open source, многие задачи в скором времени будут решены.

Если хотите больше погрузиться в тему Flutter, посмотрите наше выступление на митапе — рассказываем все самое важное за час.

--

--