§01
Umumiy ko'rinish
- Bu nima: Restaurant chain (UZ) uchun B2C ovqat yetkazib berish ilovasi. Mijoz shahar/filial (terminal) tanlaydi, Yandex Maps orqali geo-zonaga bog'langan yetkazib berish turini (yetkazib berish/olib ketish) belgilaydi, savatni yig'adi, buyurtmani rasmiylashtiradi, to'lovni amalga oshiradi (Payme), holatni kuzatadi, bonus ballari to'playdi, yangiliklar/aksiyalarni o'qiydi. pubspec'dagi versiya —
1.0.70+70. - Turi / holati / roli: mobil (Flutter, iOS+Android) · maintained (oxirgi kommitlar — 2025-yil aprel) · lead — foydalanuvchi eng ko'p hissa qo'shgan ishtirokchi (268 dan ~108), 3 kishilik jamoa (shahaa/Shahzod ~95 va Bobur ~63 bilan birga).
- Faol davr: 2021-08-30 → 2025-04-19 — bitta produktning deyarli 4 yillik uzluksiz rivojlanishi (Flutter SDK migratsiyalari, bog'liqliklarni yangilash, funksiyalar). Uzoq umr = real produktni saqlab turishning kuchli signali.
§02
Stek
- Tillar: Dart (Flutter, SDK
>=2.17.0). - Freymvorklar/kutubxonalar:
- *State management (aralash):* MobX (
flutter_mobx,mobx_codegen) + flutter_bloc (9.x) + flutter_hooks — bitta loyihada uchta reaktiv yondashuv (uzoq evolyutsiya merosi). - *Lokal saqlash:* Hive +
hive_flutter+hive_generator— codegen orqali tiplashtirilgan adapterlar (@HiveType/@HiveField,models/basket.dart,terminals.dartga qarang),shared_preferences. - *Navigatsiya/DI:*
auto_route(codegen routing) +get_it(service locator). - *Xaritalar/geo:* yandex_mapkit +
geolocator— manzil/yetkazib berish zonasini tanlash, kuzatuv. - *Auth:* lokal paketlar
authentication_repository+user_repository(repository pattern,packages/+lib/src/),otp_autofill,intl_phone_number_input,pin_code_fields— telefon+OTP orqali kirish. - *Firebase:* core + crashlytics + messaging (push).
- *i18n:* easy_localization (+loader) — RU/UZ/EN (modellarda
nameUz/nameEnmaydonlari). - *Formalar/UI:*
flutter_form_builder+form_builder_validators,flutter_platform_widgets(iOS/Android adaptiv),flutter_html/simple_html_css, ko'plab UI paketlari (carousel, staggered animatsiyalar, rating bar, modal sheet'lar). - *Yangilanishlar:*
in_app_update+upgrader— majburiy/moslashuvchan yangilanishlar. - Infra/deploy: native build'lar Android (Gradle) + iOS (CocoaPods),
flutter_native_splash,flutter_launcher_icons, Firebase (GoogleService-Info.plist,firebase_options.dart). Backend — tashqi (Restaurant chain (UZ) API), ilova esa klient tomonida. - Ma'lumotlar: Hive (savat/shahar/terminallar/foydalanuvchining offline keshi),
httporqali REST. - Diqqatga sazovor tooling:
patches/country_pickers— lokal bog'liqlik patch'i;dependency_overrides(eski Android SDK uchunflutter_plugin_android_lifecycletuzatilgan) — versiya konfliktlari bilan real ish.
§03
Nima qilindi
Kommit xabarlari ko'pincha qisqa/befoyda ("changed version", "dd") — xulosalar koddan chiqarilgan.
- Katalog va savat: mahsulotlar, bo'limlar, aloqador mahsulotlar, modifikatorlar; Hive'dagi savat (
BaskettypeId 2 — encodedId/lineCount/totalPrice) offline saqlanishi bilan. - Yetkazib berish/geo: Yandex Maps'da terminal va zona tanlash (
widgets/delivery/*: delivery_modal, terminals_modal, pickup), geolokatsiya, har bir terminal uchun yetkazib berish/olib ketish vaqtini hisoblash. - To'lov: har bir terminal uchun alohida Payme integratsiyasi (
TerminalsdapaymeActive,paymeMerchantId,paymeSecureKey,paymeTestMode,paymePrintmaydonlari) — har bir filial uchun har xil merchant kalitlari. - Auth: kodni avtomatik to'ldirish bilan telefon+OTP, alohida paketlardagi repository pattern.
- Update service:
services/app_update_service.dart(~14.5 KB) —in_app_updateustidagi singleton: immediate/flexible yangilanish, qayta ko'rsatishdan himoya bilan restart dialogi (_isRestartDialogShowing), faqat debug uchun emulyatsiya (kDebugModegate). - Ishonchlilik:
main.dartda CrashlyticsFlutterError.onError+PlatformDispatcher.instance.onErrorga ulangan (asinxron xatolarni ushlash), fon rejimidagi push handler. - Hajm: ~3.7 yilda 268 kommit;
lib/da 123 ta .dart fayl, ~13 ta domen widget bo'limi.
§04
Texnik chellenjlar
Kod/fayllar bilan tasdiqlangan:
- Hive'da codegen bilan offline-first (
models/*.dart+*.g.dart): domen modellari (Basket, Terminals, City, DeliveryType, PayType, Stock, User…) tiplashtirilgan adapterlar orqali Hive'ga serializatsiya qilinadi (@HiveType(typeId: N)), maydon raqamlashi o'tkazib yuborishlar bilan qo'lda boshqariladi (masalan, Terminals'da 20-maydon o'tkazib yuborilgan) — ilova rivojlangani sari lokal-DB sxemasini ehtiyotkorlik bilan boshqarish. → lokal saqlash migratsiyalarini tushunish. - Ko'p filialli to'lov konfiguratsiyasi (
models/terminals.dart): har bir terminal o'zining Payme ma'lumotlari va test/prod rejimini olib yuradi — ilova aslida savdo nuqtalari bo'ylab multi-tenant sifatida ishlaydi. → real riteyl domenini modellashtirish. - Yangilanishning chekka holatlarini produkshn darajasida boshqarish (
services/app_update_service.dart): singleton, idempotent dialog (dublikatlarga qarshi flag), immediate-update mavjud bo'lmaganda toast bilan graceful degradation, test yo'linikDebugModeortida izolyatsiya qilish. → produkshn UX chekka holatlariga e'tibor. - Uchdan-uchgacha crash reporting (
main.dart): ham sinxron Flutter xatolari, hamPlatformDispatcher.onErrororqali asinxron xatolar Crashlytics'ga fatal sifatida boradi — to'liq qamrov. → operatsion yetuklik. - Adaptivlik va i18n:
flutter_platform_widgets(iOS/Android'da native ko'rinish) + 3 til bo'ylab easy_localization, modellarda to'g'ridan-to'g'ri lokalizatsiyalangan maydonlar bilan. → real ko'p tilli bozor (O'zbekiston) uchun ishlash. - Bog'liqliklarni boshqarish:
country_pickersning lokal patch'i + eski Android SDK uchundependency_overrides— katta paket daraxtidagi konfliktlarni hal qilish. → uzoq umr ko'radigan Flutter loyihasini saqlash tajribasi.
§05
AI yordamida ishlab chiqish
- Topilgan sessiyalar: 0. To'liq yo'lni normallashtirish katalog bermadi; qo'shni yoki ichma-ich joylashgan sessiyalar ham yo'q.
- AI bilan nima qilingan: ma'lumot yo'q — loyiha Claude Code'dan faol foydalanishdan oldin ishlab chiqilgan (2021–2025).
- AI-vorkflow patternlari: yo'q.
§06
Yutuqlar va metrikalar
- Uzoq umr: bitta produkshn ilovaning ~3.7 yili, 268 kommit, 1.0.70 versiya.
- Kod bazasi ko'lami: 123 ta .dart fayl, ~13 ta domen widget bo'limi, ~40 ta model.
- Real foydalanuvchilar: Restaurant chain (UZ) (O'zbekiston) uchun ochiq yetkazib berish ilovasi, real to'lovlar (Payme), push, crash analitikasi.
- Cross-platform: adaptiv UI bilan iOS + Android uchun yagona kod bazasi.