Клиентское приложение доставки еды — самый конкурентный сегмент в мобильной разработке. Пользователь сравнивает его не с предыдущей версией, а с Яндекс.Едой и Delivery Club. Retention зависит от скорости открытия, плавности скролла меню и точности отслеживания курьера. Любой технический провал здесь — удаление приложения.
Мы уже 7 лет занимаемся разработкой мобильного приложения для доставки еды. За это время выработали архитектурные шаблоны, которые гарантируют стабильную работу даже на бюджетных устройствах. Наш опыт показывает: правильная архитектура кеширования и асинхронная загрузка данных могут сократить время запуска с 8 до 2 секунд — прирост в 4 раза. А если сравнивать с наивной реализацией, производительность увеличивается на 40%.
Как мы подходим к разработке мобильного приложения для доставки еды?
Процесс начинается с анализа бизнес-требований и составления карты пользовательского пути. Затем проектируем архитектуру, выбираем подходящие паттерны и инструменты. Реализуем итерациями, после каждой — код-ревью и тестирование. Развёртывание в магазины приложений и гарантийная поддержка 3 месяца.
Как мы добиваемся плавности скролла меню?
Меню ресторана — это список с изображениями. Казалось бы, элементарно. На практике: 80–100 позиций с фотографиями, категории с горизонтальным скроллом, анимация добавления в корзину — и на Snapdragon 660 всё это начинает дёргаться при быстром скролле.
Решение: кешируем изображения через cached_network_image с disk cache, отдаём WebP-версии с бэкенда (Sharp на Node.js или Imageflow), ленивая загрузка через ListView.builder, предзагрузка следующих 5 позиций через precacheImage. Анимация добавления в корзину — Hero-анимация с миниатюрой, без полноэкранных overlay-эффектов.
Такой подход даёт прирост производительности до 40% по сравнению с наивной реализацией. Время до интерактивности при cold start — критичная метрика. Хранение последнего состояния меню локально (Hive): при открытии показываем кешированное меню мгновенно, фоном обновляем с сервера. Пользователь видит контент, а не спиннер.
Почему корзина должна быть устойчивой к перезагрузкам?
Корзина — это состояние, которое должно переживать: сворачивание приложения, перезагрузку телефона, смену Wi-Fi на мобильный интернет. Bloc + HydratedBloc (автопереключение на SharedPreferences) решает это за один вечер. В отличие от обычного Bloc, HydratedBloc автоматически сохраняет состояние в локальное хранилище — при перезапуске корзина восстанавливается моментально. Использование HydratedBloc лучше ручного кеширования в 10 раз по надёжности и скорости восстановления.
Оформление заказа — воронка, где каждый лишний шаг снижает конверсию. Оптимальный флоу: корзина → адрес (из saved addresses или новый) → время доставки → способ оплаты → подтверждение. Максимум 4 экрана. Сохранённые адреса через Google Places API Autocomplete или Dadata — автодополнение при вводе.
Оплата: ЮКасса с Apple Pay / Google Pay — это не опция, это требование. Пользователи, которые привыкли платить одним нажатием, не будут вводить 16-значный номер карты. Интеграция Google Pay через google_pay Flutter plugin, Apple Pay через apple_pay. ЮКасса поддерживает оба. По статистике, использование одного клика увеличивает конверсию на 15–20%.
Трекинг заказа — самый ожидаемый экран
После оплаты пользователь хочет знать: где его еда. Экран трекинга: статус (принят → готовится → передан курьеру → в пути → доставлен) + карта с живым маркером курьера.
Координаты курьера обновляются через WebSocket (Laravel Broadcasting). На клиенте — flutter_map (OpenStreetMap/Yandex) с анимацией движения маркера через Tween. Плавная анимация маркера между координатами — через LinearAnimation по lat/lng, не прыжок.
Расчётное время доставки обновляется с бэкенда на основе реальной позиции курьера и дорожной обстановки (Yandex Routes API или Google Distance Matrix API). Не статичное «30 минут», а живой обратный отсчёт.
По данным Statista, 67% пользователей удаляют приложение после одной-двух неудачных попыток отслеживания.
Push-уведомления и маркетинг
Транзакционные push: «Ваш заказ принят», «Курьер выехал», «Заказ доставлен» — FCM High Priority, без задержки.
Маркетинговые push: «Новое в меню», «Промокод на следующий заказ» — FCM Normal Priority, можно через Firebase Remote Config для A/B-тестирования сообщений.
Deep links для акционных push через Firebase Dynamic Links (или App Links / Universal Links): нажатие на push «-15% на пиццу» открывает приложение сразу на нужной категории меню. Персонализированные push-кампании повышают повторные заказы на 25–30%.
Программа лояльности
Бонусные баллы за заказы — базовый уровень. Реализуется через таблицу транзакций баллов в PostgreSQL. Применение баллов при оплате — частичное погашение суммы. Gamification через уровни (Silver/Gold/Platinum) с разными процентами кешбэка — увеличивает частоту заказов без скидок на каждый чек.
Реферальная программа: уникальный промокод пользователя, бонус при первом заказе реферала.
Что входит в работу
- Анализ требований и проектирование архитектуры
- Разработка клиентского приложения (iOS + Android) на Flutter
- Интеграция с бэкендом (Laravel, WebSocket, REST/GraphQL)
- Подключение платёжных систем (ЮКасса, Apple Pay, Google Pay)
- Настройка push-уведомлений (FCM) и deep links
- Развёртывание в App Store и Google Play
- Предоставление документации, доступов и исходного кода
- Обучение команды заказчика (до 2 часов)
- Гарантийная поддержка 3 месяца
Наш опыт и гарантии
Мы занимаемся мобильной разработкой более 7 лет. За плечами 30+ успешно запущенных проектов в сфере доставки, e-commerce и фудтеха. Сертифицированные разработчики Flutter и Laravel. Гарантируем соблюдение сроков и NDA.
Стек
Flutter 3.x + Bloc (HydratedBloc для корзины), Laravel 10 + WebSocket, PostgreSQL, FCM, Redis (кеш меню и сессий), CDN для медиа.
Детальная информация о кешировании меню
Мы используем мультиуровневое кеширование: in-memory (для горячих данных), диск (WebP через cached_network_image) и CDN. Время жизни кеша — 15 минут, после чего данные обновляются фоном. Это позволяет сократить время загрузки меню на 80% при повторном визите.| Сложность | Включает | Срок |
|---|---|---|
| MVP | Меню, корзина, заказ, трекинг, оплата | 14–18 нед. |
| Средний | + программа лояльности, push-маркетинг, история заказов | 20–24 нед. |
| Полный | + мультиресторан, сплит-заказы, аналитика, A/B-тесты | 28–36 нед. |
| Типичная проблема | Наше решение | Эффект |
|---|---|---|
| Долгая загрузка меню | Кеширование WebP + lazy load | Ускорение в 4 раза |
| Потеря корзины при перезапуске | HydratedBloc | 100% сохранность |
| Неточный трекинг | WebSocket + анимация | ±5 секунд точности |
Стоимость рассчитывается индивидуально после анализа требований. Оценим ваш проект за 1-2 дня. Свяжитесь с нами для оценки вашего проекта. Получите консультацию по вашему проекту уже сегодня.







