Мобильное приложение на Flutter: 5 ошибок, которые допускает бизнес

Сегодня расскажем, какие ошибки совершает бизнес, когда начинает создавать мобильное приложение на Flutter.

Вы в блоге Surf. Мы более 12 лет работаем с мобильными технологиями и более 3 — с Flutter. Мы разработали на нём приложения для Росбанка, KFC, Риглы и других.

💼Узнайте больше о нашем опыте мобильной разработки.

За время работы с Flutter мы выпустили в свет более 15 проектов и на собственном опыте убедились, что Flutter подходит для решения большого спектра задач разных отраслей бизнеса.

  • В ритейл и e-commerce на Fluter можно детально проработать UX и юзер-флоу, реализовать нативно-подобный дизайн. Ритейл является одной из наших магистральных компетенций, на Flutter мы создали шесть приложений для самой большой сети аптек в России — Ригла — на единой кодовой базе.
  • В корпоративных решениях помогаем руководителям оптимизировать работу подчинённых, а линейным сотрудникам составлять чёткие и понятные задачи на день, неделю, месяц. На Flutter мы написали внутреннее приложение для торгово-производственной компании и KFC. Разрабатываем сложные корпоративные решения, интегрируем дополнительное оборудование для автоматизации ритейла. Сейчас работаем над приложением для оптимизации процессов в строительстве и крупным образовательным сервисом.
  • В финтехе и банкинге с помощью Flutter создаём приложения, соответствующие всем требованиям безопасности. Технологию уже оценили Росбанк, заказав нам разработку решения для бизнеса и СМП Банк — первый в Европе банк на Flutter для физических лиц.
  • В медиа на Flutter можно обеспечить качественное воспроизведение и сложную анимацию. Именно на этой кроссплатформе мы сделали в высоконагруженное видеостриминговое приложение The Hole.

Мы убедились, что Flutter подходит не только для создания мобильных приложений — с помощью кроссплатформы можно создавать и PWA-приложения (Progressive Web Application), и даже сайты.

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

В этой статье:

Ошибка № 1 — создавать инхаус-команду для разработки на Flutter с нуля

В чём риск для бизнеса? Сложно оценить компетенции разработчиков при найме, так как технология ещё не использовалась в компании. Уровня команды может не хватить для реализации работающего продукта.

Буквально каких-то 3 года назад Flutter интересовал только узкий круг разработчиков, а клиенты относились к новой технологии крайне настороженно. Те представители бизнеса, что решались реализовать своё приложение на Flutter, долго и тщательно выбирали подрядчика, потому что опытных разработчиков на рынке были единицы. Делать такой проект своими внутренними ресурсами решались только такие гиганты, как китайский концерн Tencent, который может позволить себе держать практически неограниченный штат разработчиков инхаус и обучать их новой технологии, или Google, который сам является автором Flutter.

Но времена изменились. Google преодолел все проблемы роста своей новой технологии и показал, что готов вкладывать много ресурсов в её дальнейшее развитие. Число проектов, реализованных на Flutter, достигло 400 000, согласно статистике Google. Популярность фреймворка среди разработчиков тоже резко выросла.

Flutter занял 1 место в мире по популярности среди кроссплатформ в 2021 году
Flutter занял 1 место в мире по популярности среди кроссплатформ в 2021 году

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

Еще одна сложность — нет чётких критериев для собственников продукта. Как на этапе отбора сотрудников проверить, справятся ли исполнители с задачами и как обеспечить им обучение и рост.

Как можно избежать ошибки? Один из рабочих вариантов — отдать разработку MVP продукта опытной аутсорс-команде разработки. Они учтут все подводные камни, создадут роадмап развития продукта, с учётом минимально необходимой на стадии MVP функциональности. Также заложат возможности для дальнейшего масштабирования, подготовят документацию по проекту.

После разработки MVP компании будет несложно забрать продукт для развития и поддержки в инхаус. Например, по такой схеме мы работали с Росбанком.

Передача происходила в 3 этапа:

  • Формирование инхаус-команды. Мы помогли с подбором кандидатов: согласовали требования к ним и подключили наших техлидов для технических интервью.
  • Погружение инхаус-команды в разработку продукта. На этом этапе проектом ещё руководил наш тимлид, а развивали продукт — разработчики Surf. Мы постепенно ввели новых сотрудников в инфраструктуру: Jira, Confluence, мессенджеры, репозитории.
  • Передача управления разработкой. Тимлид Surf присутствует на проекте и помогает освоиться инхаус-тимлиду. Когда убедились, что ведущий разработчик со стороны бизнеса ориентируется в проекте, передали инхаус-команде все оставшиеся задачи.

Для того, чтобы стандартизировать процесс поиска и проведения технических собеседований, мы создали чек-лист вопросов разработчикам на Flutter:

  • Что такое Flutter и каковы его преимущества?
  • В чем разница между декларативным и императивным программированием?
  • Назовите основные этапы написания приложения Flutter.
  • Что можно назвать «кирпичиками» (building blocks) приложения на Flutter?
  • Назовите разницу между виджетами с сохранением состояния и без.
  • Что делает виджет Spacer?
  • Почему первый запуск приложения Flutter занимает много времени?
  • Что такое функция горячей перезагрузки во Flutter?
  • Поддерживает ли Dart многопоточность?
  • Какие интегрированные среды разработки используются для разработки Flutter? Какой из них вы предпочитаете и почему?

Ошибка № 2 — ошибки архитектуры

В чём риск для бизнеса? Сама архитектура мобильного приложения на Flutter предоставляет большую свободу в выборе логики. Однако с ростом проекта можно столкнуться с тем, что на старте она было всё же недостаточно проработана. Это увеличит время на отладку и исправление ошибок в приложении.

Казалось бы, это больше про технических специалистов, но от этой ошибки страдает и бизнес. Увеличивается время на отладку, а значит, и time-to-market проекта. Число строк кода больше, а значит, разработчики тратят больше времени на то, что разобраться в нём или найти ошибку, а тестировщики — на его тестирование. А стоимость проекта для бизнеса закономерно растёт.

Какие ошибки бывают?

  • Смешение бизнес-логики и отображения визуальных компонентов. Это может очень сильно увеличить количество строк кода, что снизит его качество и нарушит один из принципов SOLID (Single Responsibility Principle) — принцип единственной ответственности.

В чём риск для бизнеса: Такой код трудно тестировать и поддерживать.

  • Нет разделения на основные слои. Вторая ошибка, связанная с нарушением бизнес-логики в том, что зачастую нет разделения на основные слои. Вся логика описывается в одном классе, сервисе или блоке, что также нарушает принцип SRP (единственной ответственности) и связывает разработчикам руки на этапе тестирования.

В чём риск для бизнеса: Изменения в одном компоненте могут существенно повлиять на работу всей системы, поэтому важно на этапе проектирования разделить слои логики.

Как можно избежать ошибок? В этом вам может помочь архитектор или опытная команда аутсорс-разработки на Flutter. Ошибки, связанные с логикой — фундаментальные. Чтобы избежать большинства из них и создавать код, который потом легко поддерживать, мы используем лучшие практики из тех подходов, которые уже описаны, задокументированы и достаточно широко используются.

Например, мы на своих проектах разделяем логику с помощью пакета Elementary, который разработан и поддерживается Flutter-разработчиками Surf. Мы используем Elementary в большинстве наших проектов для создания чистой архитектуры и легко тестируемого кода. Она применяется в e-commerce и финтех проектах — там, где заложена работа с анимацией, выпадающими списками, изменением интерфейса при определённых действиях.

<p>Представление взаимодействия компонентов Elementary</p>

Представление взаимодействия компонентов Elementary

Также на Flutter-проектах мы используем метод чистой архитектуры, в которой выделяем основные слои:

  • Domain слой — он декларирует или описывает, с какими данными мы будем работать.
  • Data слой — внутри него описывается реализация тех классов, которые мы описываем в domain.
  • Слой presentation — в нём разделяем презентационную логику и отображение.

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

Ошибка № 3 — неправильная работа с виджетами

В чём риск для бизнеса? Некорректная работа приложения, его «подтормаживание» из-за того, что для решения задачи используется Франкенштейн из виджетов вместо одного подходящего.

В интенсивной работе над проектом разработчики зачастую просто не успевают ознакомиться с готовыми решениями. Очень редко кто находит время открыть каталог виджетов и перебрать каждый: изучить возможности, пробовать в действии, изучить API. Тем не менее, знать готовые решения полезно. Часто, в попытке быстрее решить очевидную задачу, разработчики решают её с помощью «монстра из виджетов». А потом оказывается, что уже существует виджет из коробки, который решает задачу гораздо проще.

Как можно избежать ошибки? Убедитесь, что ваши разработчики следят за новыми возможностями Flutter и регулярно изучают его инструменты. Flutter предлагает множество доступных “из коробки” виджетов, которые могут решить большинство задач.

Какие виджеты есть во Flutter:

  • Простые, часто используемые. Как правило, они созданы для работы с разметкой. Самые популярные: Expanded, Flex, Wrap. Они очень похожи между собой, и часто разработчики их путают.
  • Простые виджеты узкого применения. Яркий представитель — Divider. С помощью этого виджета вёрстка становится более ясной и предсказуемой — он отделяет один блок от другого не только визуально в интерфейсе, но и описание одного блока от другого в коде.
  • Сложные виджеты разметки. Например, CustomMultiChildLayout. Часто разработчики привыкают собирать UI из простых виджетов и не разбираются в сложных. Это неправильный путь, так как это иногда ведёт к созданию неоптимального кода.
  • Редко используемые виджеты разметки: IntrinsicHeight, OverflowBox, FittedBox. Если разработчик про них не знает, то, естественно, в голову не придёт их использовать. А между тем, эти виджеты помогают сделать вёрстку элементов точнее.
  • Адаптивные виджеты, или Sliver-виджеты. Они облегчают разработку, когда нужно реализовать сложный дизайн.

Ошибка № 4 — не настроена релизная сборка

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

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

Как можно избежать ошибки? Контролируйте, чтобы ваши разработчики настраивали релизные сборки заранее. Настроить сборку на Android несложно и может появиться ложная иллюзия, что так же будет и с iOS. Однако на сборку iOS нужно гораздо больше времени. Поэтому первое, что нужно делать при старте проекта — это заранее всё настроить. Так бизнес потеряет меньше на срочных правках.

Небольшая шпаргалка для команды разработки, когда и какой режим сборки стоит использовать:

  • Режим debug (отладка) — во время разработки. На этом этапе приложение настраивается на устройстве, эмуляторе или симуляторе.
  • Режим profile — для анализа производительности. В этом режиме поддерживаются элементы отладки, достаточные для производительности вашего приложения. В этом режиме отключены эмуляторы и симуляторы, так как их поведение не соответствует реальной производительности устройств.
  • Режим release — для выпуска приложения. Используется при развёртывании приложения, когда требуется максимальная оптимизация и минимальный размер занимаемой памяти.

Ошибка № 5 — в приложении не предусмотрена локализация

В чём риск для бизнеса? При выходе на международный рынок придётся создавать новое приложение с нуля и нести большие дополнительные расходы.

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

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

Техническая подсказка

Во Flutter есть intl — инструмент интернационализации и локализации. Также это решение включает перевод сообщений, простановку множественного числа и рода, форматирование и синтаксический анализ даты. Если intl пугает своим масштабом, можно использовать плагины для Android Studio и VS Code. Они будут генерировать всё сами, а работать с локализацией станет легче.

Мы часто видим проекты, в которых перечисленные выше ошибки повторялись вновь и вновь. Часто такие проекты становятся разочарованием для всей команды. Разработчики винят Flutter, в том, что он недостаточно развит для использования в крупном и сложном проекте. Менеджеры проекта винят разработчиков в «закапывании» в код, в то время как срок релиза поджимает. Тестировщики в шоке от объёма свалившихся испытаний, а владелец продукта и вовсе не понимает, что происходит внутри проекта.

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

Разобраться в технологии, создать грамотное MVP с правильной архитектурой и заложить в него возможности для локализации и быстрого устранения ошибок, поможет опытная команда. В будущем такое приложение можно развивать и масштабировать инхаус-ресурсами.

Если вы не хотите совершать фатальные ошибки при разработке на Flutter, пишите нам на vc_hello@surfstudio.ru.

Подробнее о нашем опыте Flutter-разработки.

Рекомендуем почитать:

Как мы полностью изменили своё мнение о Flutter

Почему вам по-прежнему стоит выбрать Flutter для своего e-commerce приложения

PWA + Flutter: созданы друг для друга

88
11
1 комментарий

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

Ответить