Назад в архив
IV. Клиентские проекты и логистические платформыдополнительнолидклиент анонимизирован

Pizza Brand Mobile App (Flutter)

Клиентское мобильное приложение для доставки еды Restaurant chain (UZ) (iOS+Android) на Flutter: каталог, корзина, оформление заказа с выбором зоны/терминала на Яндекс Картах, оплата через Payme, трекинг, мультиязычность — живой продакшн-продукт, разрабатывался ~3.7 года.

Статус
поддерживается
Период
2021-08-30 → 2025-04-19
AI-сессий
Стек
Языки
Dart
Фреймворки · Инфра
FlutterMobXflutter_blocflutter_hooksHiveget_itYandex MapKitFirebaseeasy_localization
§01

Обзор

  • Что это: B2C-приложение доставки еды для Restaurant chain (UZ). Клиент выбирает город/филиал (терминал), тип доставки (доставка/самовывоз), привязанный к гео-зоне через Яндекс Карты, собирает корзину, оформляет заказ, оплачивает (Payme), отслеживает статус, копит бонусные баллы, читает новости/акции. Версия в pubspec — 1.0.70+70.
  • Тип / статус / роль: mobile (Flutter, iOS+Android) · maintained (последние коммиты — апрель 2025) · lead — пользователь топ-контрибьютор (~108 из 268), команда из 3 человек (вместе с shahaa/Shahzod ~95 и Bobur ~63).
  • Активный период: 2021-08-30 → 2025-04-19 — почти 4 года непрерывной эволюции одного продукта (миграции Flutter SDK, апгрейды зависимостей, фичи). Долгожительство = сильный сигнал сопровождения реального продукта.
§02

Стек

  • Языки: Dart (Flutter, SDK >=2.17.0).
  • Фреймворки/библиотеки:
  • *Управление состоянием (смешанное):* MobX (flutter_mobx, mobx_codegen) + flutter_bloc (9.x) + flutter_hooks — три реактивных подхода в одном проекте (наследие долгой эволюции).
  • *Локальное хранилище:* Hive + hive_flutter + hive_generator — типизированные адаптеры через codegen (@HiveType/@HiveField, см. models/basket.dart, terminals.dart), shared_preferences.
  • *Навигация/DI:* auto_route (codegen-роутинг) + get_it (service locator).
  • *Карты/гео:* yandex_mapkit + geolocator — выбор адреса/зоны доставки, трекинг.
  • *Аутентификация:* локальные пакеты authentication_repository + user_repository (паттерн repository, packages/ + lib/src/), otp_autofill, intl_phone_number_input, pin_code_fields — вход по телефону+OTP.
  • *Firebase:* core + crashlytics + messaging (push).
  • *i18n:* easy_localization (+loader) — RU/UZ/EN (поля nameUz/nameEn в моделях).
  • *Формы/UI:* flutter_form_builder + form_builder_validators, flutter_platform_widgets (адаптивность iOS/Android), flutter_html/simple_html_css, множество UI-пакетов (carousel, staggered-анимации, rating bar, modal sheets).
  • *Обновления:* in_app_update + upgrader — принудительные/гибкие обновления.
  • Инфраструктура/деплой: нативные сборки Android (Gradle) + iOS (CocoaPods), flutter_native_splash, flutter_launcher_icons, Firebase (GoogleService-Info.plist, firebase_options.dart). Бэкенд — внешний (Restaurant chain (UZ) API), приложение — клиентская часть.
  • Данные: Hive (офлайн-кэш корзины/города/терминалов/пользователя), REST через http.
  • Заметный тулинг: patches/country_pickers — локальный патч зависимости; dependency_overrides (фикс flutter_plugin_android_lifecycle под старый Android SDK) — реальная работа с конфликтами версий.
§03

Что реализовано

Сообщения коммитов часто короткие/мусорные ("changed version", "dd") — выводы делаются по коду.

  • Каталог и корзина: продукты, разделы, сопутствующие товары, модификаторы; корзина на Hive (Basket typeId 2 — encodedId/lineCount/totalPrice) с офлайн-персистентностью.
  • Доставка/гео: выбор терминала и зоны на Яндекс Картах (widgets/delivery/*: delivery_modal, terminals_modal, pickup), геолокация, расчёт времени доставки/самовывоза по терминалу.
  • Оплата: пофилиальная интеграция Payme (поля paymeActive, paymeMerchantId, paymeSecureKey, paymeTestMode, paymePrint на Terminals) — разные merchant-ключи для каждого филиала.
  • Аутентификация: телефон+OTP с автозаполнением кода, паттерн repository в отдельных пакетах.
  • Сервис обновлений: services/app_update_service.dart (~14.5 KB) — синглтон поверх in_app_update: immediate/flexible-обновление, диалог перезапуска с защитой от повторного показа (_isRestartDialogShowing), эмуляция только в debug (kDebugMode-гейт).
  • Надёжность: в main.dart Crashlytics подключён к FlutterError.onError + PlatformDispatcher.instance.onError (перехват асинхронных ошибок), фоновый push-хендлер.
  • Объём: 268 коммитов за ~3.7 года; 123 .dart-файла в lib/, ~13 доменных секций виджетов.
§04

Технические челленджи

Подтверждено кодом/файлами:

  • Offline-first на Hive с codegen (models/*.dart + *.g.dart): доменные модели (Basket, Terminals, City, DeliveryType, PayType, Stock, User…) сериализуются в Hive типизированными адаптерами (@HiveType(typeId: N)), нумерация полей ведётся вручную с пропусками (например, в Terminals пропущено поле 20) — аккуратное управление схемой локальной БД по мере развития приложения. → понимание миграций локального хранилища.
  • Мультифилиальная конфигурация оплаты (models/terminals.dart): каждый терминал несёт собственные Payme-креды и test/prod-режим — приложение фактически работает как multi-tenant по точкам продаж. → моделирование реального ритейл-домена.
  • Production-grade обработка edge-кейсов обновления (services/app_update_service.dart): синглтон, идемпотентный диалог (флаг против дублей), graceful degradation с тостом, когда immediate-обновление недоступно, изоляция тестового пути за kDebugMode. → внимание к продакшн-UX edge-кейсам.
  • Сквозной crash reporting (main.dart): и синхронные ошибки Flutter, и асинхронные через PlatformDispatcher.onError уходят в Crashlytics как fatal — полное покрытие. → операционная зрелость.
  • Адаптивность и i18n: flutter_platform_widgets (нативный вид на iOS/Android) + easy_localization на 3 языках с локализованными полями прямо в моделях. → работа под реальный мультиязычный рынок (Узбекистан).
  • Управление зависимостями: локальный патч country_pickers + dependency_overrides под старый Android SDK — разрешение конфликтов в большом дереве пакетов. → опыт сопровождения долгоживущего Flutter-проекта.
§05

AI-разработка

  • Найдено сессий: 0. Нормализация полного пути не дала директории; соседних/вложенных сессий тоже нет.
  • Что делалось с AI: данных нет — проект развивался до активного использования Claude Code (2021–2025).
  • Паттерны AI-воркфлоу: отсутствуют.
§06

Достижения и метрики

  • Долгожительство: ~3.7 года одного продакшн-приложения, 268 коммитов, версия 1.0.70.
  • Масштаб кодовой базы: 123 .dart-файла, ~13 доменных секций виджетов, ~40 моделей.
  • Реальные пользователи: публичное приложение доставки для Restaurant chain (UZ) (Узбекистан), реальные платежи (Payme), push, crash-аналитика.
  • Кроссплатформенность: единая кодовая база для iOS + Android с адаптивным UI.
§07

Контрибьюторы

git shortlog · все ветки

  1. Dave93108
  2. shahzodsalimsakov95
  3. Boburt63
  4. User2
4 контрибьютора268 коммитов всего
Сейчас

Открыт к ролям Senior / Staff инженера и избранному фрилансу — продакшн-AI, платформы и full-stack разработка.

Связаться