Об опыте разработки на Dart

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

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

Об опыте разработки на Dart

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

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

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

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

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

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

Об опыте разработки на Dart

Заказчик предложил использовать стек 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 возникало много проблем, в которые приходилось глубоко вникать. Сперва мы придумывали решения сами, но ситуация с сообществом менялась в лучшую сторону прямо на глазах.

Об опыте разработки на Dart

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

Интерфейс

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

Об опыте разработки на Dart

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

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

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

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

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

Об опыте разработки на Dart

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 — расскажем все самое важное за час.

2424
18 комментариев

Похоже Flutter стал катализатором изучения Dart для многих.

5

Дизайн приятный, тема модная.

Понимаю, что немного не по теме, но возникло пару вопросов по содержанию:
- "успешно создали". Успех, это что; Доделали приложение?
- "и быстром запуске стартапов". Стартап, это что; Наличие приложения?

3

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

4

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

1

Хреново что для взаимодействием с железом надо писать платформо-специфичный код. А было бы круто дёрнуть объект camera и вызвать метод сделать кадр.

2

У flutter есть набор официально поддерживаемых плагинов, которые уже включены в репозиторий самого flutter https://github.com/flutter/plugins.
Среди них есть:
1) image_picker: https://github.com/flutter/plugins/blob/master/packages/image_picker
на Dart получение картинки с камеры выглядит так:
var image = await ImagePicker.pickImage(source: ImageSource.camera);

2) если же нам нужен CameraView, например для AR приложения, то используем из коробки плагин camera https://github.com/flutter/plugins/blob/master/packages/camera

8

Для написания плагина Flutter можно использовать как objective-c, java, так и Swift, Kotlin. https://flutter.io/docs/development/packages-and-plugins/developing-packages.

Выбор может зависеть от опыта или наличия билиотек на конкретном языке, решающих требуемую задачу.

4