Compare commits

..
45 Commits
Author SHA1 Message Date
Amirmahdi 4b266e732d feat: vr 3 2026-07-13 08:02:06 +03:30
Amirmahdi 5a3dbb0466 feat: featch cards to storage 2026-07-12 09:05:39 +03:30
Amirmahdi 2ada58d7e6 feat: add bazar rsa 2026-07-10 16:59:23 +03:30
Amirmahdi 8cd90f4a5f feat: update device info plus 2026-07-10 12:39:10 +03:30
Amirmahdi f13b196971 fix: ic launcher splash screen 2026-07-10 12:01:36 +03:30
Amirmahdi a7fb3ed8f9 fix:profile 2026-07-10 11:21:44 +03:30
Amirmahdi b008ec6056 fix: appbar 2026-07-10 10:23:02 +03:30
Amirmahdi f5e51ed44d feat: dialig for conectivity 2026-07-10 10:20:17 +03:30
Amirmahdi 7f420e6ae1 feat: selected after buy 2026-07-10 01:26:29 +03:30
Amirmahdi 97d156c492 feat: add characters 2026-07-10 00:56:58 +03:30
Amirmahdi 7c067d36f2 style: shop 2026-07-09 07:24:49 +03:30
Amirmahdi b9d21c505e feat: show hand result ui 2026-07-09 05:54:10 +03:30
Amirmahdi adc2d1fc47 refactor: all screens refactor 2026-07-08 20:12:04 +03:30
Amirmahdi 2496580e86 fix: delay after fire 2026-07-08 19:20:30 +03:30
Amirmahdi 6b9b9a0f3a fix: frames 2026-07-08 13:48:29 +03:30
Amirmahdi df2ae2a215 feat:add frames 2026-07-08 12:15:06 +03:30
Amirmahdi 46a649166b feat: add game graphic 2026-07-08 09:06:32 +03:30
Amirmahdi ffd2646eea feat: phase 1 of improve 2026-07-08 00:17:46 +03:30
Amirmahdi 0bd2b4a18a feat: add steak 2026-07-07 21:07:42 +03:30
Amirmahdi 5424695f25 feat: add tournoment feature 2026-07-07 15:18:55 +03:30
Amirmahdi 5b0a66bb54 feat: terms and condition 2026-07-06 18:27:06 +03:30
Amirmahdi 3e7e069487 style: ui for record table 2026-07-05 20:05:25 +03:30
Amirmahdi df5cc699b6 feat: shop is change 2026-07-05 19:49:59 +03:30
Amirmahdi e94f03c499 fix: some problems are fixed 2026-07-05 18:40:53 +03:30
Amirmahdi 5017e9a613 feat: add payment 2026-07-05 16:03:15 +03:30
Amirmahdi c2356b3242 feat: add coin private table 2026-07-04 12:45:52 +03:30
Amirmahdi 7acd72c286 feat: add carpet 2026-07-03 21:56:34 +03:30
Amirmahdi 5160deb973 feat: change theme 2026-06-26 17:29:21 +03:30
Amirmahdi 153b4caa3d feat: add front chat 2026-06-25 23:34:10 +03:30
Amirmahdi fa45ef0737 feat: add message feature 2026-06-25 01:11:34 +03:30
Amirmahdi e8cde8e1f7 feat: cleaning code 2026-06-24 22:56:32 +03:30
Amirmahdi e73333344f feat: add reshuffle for ticket 2026-06-24 21:00:18 +03:30
Amirmahdi 500c61a409 fix: trump trick 2026-06-24 14:17:21 +03:30
Amirmahdi e0d6763c00 feat: won trick ui 2026-06-24 10:47:17 +03:30
Amirmahdi 08937a66cb style: ui perfection 2026-06-24 09:09:00 +03:30
Amirmahdi 108a972761 feat: get cards from backend 2026-06-24 08:35:31 +03:30
Amirmahdi d837aca96e style 2026-06-19 23:38:33 +03:30
Amirmahdi 0c8fd22264 feat: rotate table players 2026-06-19 23:18:51 +03:30
Amirmahdi 04b97ca163 priority of cards fixed 2026-06-19 21:35:23 +03:30
Amirmahdi c4c1453f7e feat: add heart beat for timing 2026-06-19 02:28:07 +03:30
Amirmahdi a4cf2b5f39 fix: some buggs 2026-06-19 00:45:30 +03:30
Amirmahdi f4d99043c4 feat: add sounds 2026-06-18 21:57:28 +03:30
Amirmahdi 519752b478 feat: refactor code 2026-06-17 12:57:28 +03:30
Amirmahdi e9f294fa19 feat: profile and subs 2026-06-17 11:32:18 +03:30
Amirmahdi 943ba13872 feat: style 2026-06-17 08:04:10 +03:30
298 changed files with 14513 additions and 2692 deletions
+3
View File
@@ -0,0 +1,3 @@
{
"flutter": "3.38.5"
}
+3
View File
@@ -43,3 +43,6 @@ app.*.map.json
/android/app/debug
/android/app/profile
/android/app/release
# FVM Version Cache
.fvm/
+13 -1
View File
@@ -1,13 +1,25 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "myket (debug)",
"request": "launch",
"type": "dart",
"args": ["--flavor", "myket", "--dart-define=BASE_URL=https://hakem.approagency.ir"]
},
{
"name": "bazaar (debug)",
"request": "launch",
"type": "dart",
"args": ["--flavor", "bazaar", "--dart-define=BASE_URL=https://hakem.approagency.ir"]
},
{
"name": "حکم‌شو (موبایل واقعی - LAN)",
"request": "launch",
"type": "dart",
"program": "lib/main.dart",
"args": [
"--dart-define=BASE_URL=http://192.168.100.6:8080",
"--dart-define=BASE_URL=https://hakem.approagency.ir",
"--target-platform=android-arm64"
]
},
+3
View File
@@ -0,0 +1,3 @@
{
"dart.flutterSdkPath": ".fvm/versions/3.38.5"
}
+77 -1
View File
@@ -1,3 +1,6 @@
import java.io.FileInputStream
import java.util.Properties
plugins {
id("com.android.application")
id("kotlin-android")
@@ -23,7 +26,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "ir.hakemsho.hakemsho"
applicationId = "com.approagency.hakemirani"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
// flutter_secure_storage حداقل SDK 23 را لازم دارد.
@@ -31,14 +34,87 @@ android {
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
// مقادیرِ پیش‌فرض تا buildِ بدونِ flavor (مثلِ `flutter run`) هم merge شود؛
// flavorها این‌ها را override می‌کنند.
manifestPlaceholders += mapOf(
"marketApplicationId" to "com.farsitel.bazaar",
"marketBindAddress" to "com.farsitel.bazaar.InAppBillingService.BIND",
"marketPermission" to "com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR"
)
}
// یک flavor برای هر فروشگاه؛ هر کدام placeholderهای manifestِ افزونه‌ی
// پرداخت (myket_iap / flutter_poolakey) را پر می‌کند. STORE به‌صورتِ
// BuildConfig هم تزریق می‌شود تا سمتِ Dart بدونِ dart-define بداند کدام
// درگاه فعال است.
flavorDimensions += "store"
productFlavors {
create("myket") {
dimension = "store"
manifestPlaceholders += mapOf(
"marketApplicationId" to "ir.mservices.market",
"marketBindAddress" to "ir.mservices.market.InAppBillingService.BIND",
"marketPermission" to "ir.mservices.market.BILLING"
)
resValue("string", "iap_store", "myket")
}
create("bazaar") {
dimension = "store"
manifestPlaceholders += mapOf(
"marketApplicationId" to "com.farsitel.bazaar",
"marketBindAddress" to "com.farsitel.bazaar.InAppBillingService.BIND",
"marketPermission" to "com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR"
)
resValue("string", "iap_store", "bazaar")
}
}
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String?
keyPassword = keystoreProperties["keyPassword"] as String?
storeFile = keystoreProperties["storeFile"]?.let {
file(it)
}
storePassword = keystoreProperties["storePassword"] as String?
}
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig = signingConfigs.getByName("debug")
getByName("release") {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
}
// هر دو افزونه‌ی پرداخت کلاسِ AIDLِ یکسانِ
// `com.android.vending.billing.IInAppBillingService` را در AARِ خود دارند؛ چون
// هر دو پکیجِ Dart همیشه در classpath هستند، هر flavor هر دو AAR را می‌کشد و
// «Duplicate class» می‌دهد. راه‌حل: از هر flavor فقط کتابخانه‌ی فروشگاهِ خودش را
// نگه می‌داریم و کتابخانه‌ی فروشگاهِ دیگر را حذف می‌کنیم (در آن flavor صدا زده
// نمی‌شود).
configurations.configureEach {
if (name.startsWith("myket")) {
exclude(group = "com.github.cafebazaar.Poolakey")
}
if (name.startsWith("bazaar")) {
exclude(group = "com.github.myketstore")
}
}
+13
View File
@@ -0,0 +1,13 @@
# هر flavor فقط کتابخانه‌ی پرداختِ فروشگاهِ خودش را دارد (کتابخانه‌ی فروشگاهِ
# دیگر در build.gradle.kts حذف شده تا «Duplicate class» رخ ندهد). در نتیجه،
# کلاسِ افزونه‌ی فروشگاهِ غایب به کلاس‌هایی ارجاع می‌دهد که در آن flavor نیستند؛
# چون در آن flavor صدا زده نمی‌شوند، به R8 می‌گوییم درباره‌شان هشدار ندهد.
-dontwarn ir.cafebazaar.poolakey.**
-dontwarn ir.myket.billingclient.**
# افزونه‌های پرداخت و کلاس‌های billing را دست‌نخورده نگه دار.
-keep class ir.cafebazaar.flutter_poolakey.** { *; }
-keep class ir.mservices.myketiap.** { *; }
-keep class ir.cafebazaar.poolakey.** { *; }
-keep class ir.myket.billingclient.** { *; }
-keep class com.android.vending.billing.** { *; }
+1 -1
View File
@@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="hakemsho"
android:label="حاکم ایرانی"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

@@ -1,12 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

@@ -1,12 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground>
<inset
android:drawable="@drawable/ic_launcher_foreground"
android:inset="16%" />
</foreground>
</adaptive-icon>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 86 KiB

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#081428</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
<item name="android:windowSplashScreenIconBackgroundColor">#081428</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
@@ -5,6 +5,10 @@
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#081428</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
<item name="android:windowSplashScreenIconBackgroundColor">#081428</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#081428</color>
</resources>
@@ -5,6 +5,10 @@
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
File diff suppressed because one or more lines are too long
+4
View File
@@ -0,0 +1,4 @@
صداهای بازی را اینجا بگذارید:
shuffle.mp3 — صدای بُر زدن/پخش کارت (هنگام شروع هر دست پخش می‌شود)
اگر این فایل نباشد، بازی بی‌صدا اجرا می‌شود (بدون خطا).
می‌توانید بعداً play.mp3 / win.mp3 و ... هم اضافه کنید.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Some files were not shown because too many files have changed in this diff Show More