# حکم‌شو — فرانت (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) رجوع کنید.
