Files
front-hokm/README.md
T
2026-06-15 16:42:28 +03:30

74 lines
4.1 KiB
Markdown

# حکم‌شو — فرانت (Flutter + Flame)
کلاینت بازی حکم. فازهای انجام‌شده: **اسکلت + احراز هویت OTP + لابی/کیف‌پول + فروشگاه + صحنه‌ی بازی با Flame**.
## پیش‌نیاز شبکه (میرور مایکت)
به‌خاطر محدودیت دسترسی، از میرور مایکت استفاده می‌شود:
```bash
export PUB_HOSTED_URL=https://pub.myket.ir
export FLUTTER_STORAGE_BASE_URL=https://pub.myket.ir
```
این دو خط در `~/.zshrc` ست شده‌اند (دائمی). برای Gradle هم یک init script سراسری در `~/.gradle/init.gradle` همه‌ی buildها را به `maven.myket.ir` هدایت می‌کند، و `android/` به همین مخزن تنظیم شده است.
## اجرا
```bash
flutter pub get
flutter run -d chrome # وب (بدون نیاز به NDK/Gradle) ✓
flutter run # موبایل (نیازمند نصب NDK — به پایین رجوع کنید)
```
اتصال به بک‌اند با `--dart-define=BASE_URL=...` قابل تنظیم است:
- امولاتور اندروید → پیش‌فرض `http://10.0.2.2:8080` (localhostِ میزبان).
- وب / شبیه‌ساز iOS → `--dart-define=BASE_URL=http://localhost:8080`.
- پروداکشن → `--dart-define=BASE_URL=https://api.hakemsho.ir`.
## وضعیت تأیید
- `flutter analyze` → بدون خطا ✓
- `flutter test` → پاس (تست مدل Wallet) ✓
- `flutter build web` → موفق ✓
## نکات build اندروید (شبکه‌ی محدود)
- **NDK**: AGP به NDK `27.0.12077973` نیاز دارد. اگر NDK را دستی دانلود کرده‌اید (مثلاً `android-ndk-r27`)، باید پوشه به‌نامِ **شماره‌ی نسخه** باشد تا AGP پیدایش کند:
```bash
cd ~/Library/Android/sdk/ndk && ln -sfn android-ndk-r27 27.0.12077973
```
- **گریدل از مایکت**: `~/.gradle/init.gradle` همه‌ی buildها را (شامل `buildscript` پلاگین‌ها) به `maven.myket.ir` هدایت می‌کند. این برای `flutter_secure_storage` لازم است که خودش `com.android.tools.build:gradle:8.13.2` را اعلام می‌کند.
- **minSdk 23 / compileSdk 36**: به‌خاطر `flutter_secure_storage` در [android/app/build.gradle.kts](android/app/build.gradle.kts) تنظیم شده.
- هشدار «unable to detect Gradle/AGP versions» بی‌ضرر است (به‌خاطر بلاک‌بودن `dl.google.com` برای چک نسخه).
`flutter build apk --debug` ✓ موفق.
## ساختار
```
lib/
├── main.dart نقطه ورود (تعیین مسیر اولیه بر اساس توکن)
├── app.dart MaterialApp.router + RTL + BlocProviderها
├── core/
│ ├── config.dart baseUrl و آدرس WebSocket
│ ├── network/api_client.dart Dio + تزریق خودکار Bearer
│ ├── storage/token_storage.dart ذخیره‌ی امن JWT
│ └── theme/app_theme.dart تم قرمز/طلایی، فونت فارسی، RTL
└── features/
├── auth/ repository، cubit، صفحه موبایل و OTP
├── lobby/ مدل Wallet، cubit، صفحه لابی
├── shop/ مدل‌ها، repository، cubit، صفحه فروشگاه (۴ تب)
└── game/ مدل‌ها، WS cubit، لیست میزها، صفحه بازی
└── flame/ HokmGame (صحنه میز) + CardComponent
```
کارت‌ها از `assets/images/cards/<CODE>.png` بارگذاری می‌شوند (۵۲ کارت + `back.jpg`)؛
اگر تصویری نبود، `CardComponent` نسخه‌ی برداری می‌کشد.
## قدم بعدی
- انیمیشن‌ها (پخش/انداختن کارت)، صدا، و صفحه‌ی نتایج بهتر.
- اتصال خرید واقعی IAP (پلاگین بازار/مایکت) و تبلیغ تپسل (فعلاً توکن توسعه‌ای به بک‌اند می‌رود).
- به [../FRONTEND_PLAN.md](../FRONTEND_PLAN.md) رجوع کنید.