fix: frames

This commit is contained in:
2026-07-08 13:48:29 +03:30
parent df2ae2a215
commit 6b9b9a0f3a
8 changed files with 461 additions and 216 deletions
@@ -11,6 +11,7 @@ import '../../../../core/locator/locator.dart';
import '../../../../core/network/ws_client.dart';
import '../../../../core/service/app_sounds.dart';
import '../../../../core/theme/app_theme.dart';
import '../../../shop/data/data_source/remote/frame_api_provider.dart';
import '../../../tournament/data/data_source/remote/tournament_api_provider.dart';
import '../../../tournament/domain/entities/tournament.dart';
import '../../../wallet/presentation/bloc/wallet_bloc.dart';
@@ -54,6 +55,7 @@ class _GameScreenState extends State<GameScreen> {
carpet: _carpet.isEmpty ? 'classic' : _carpet,
);
_loadTournament();
locator<FrameApiProvider>().warmCache(); // رنگِ قاب‌ها برای HUD (best-effort)
}
/// بررسی می‌کند آیا کاربر در تورنومنتِ فعالی ثبت‌نام کرده تا نشانِ درون‌بازی و
@@ -4,6 +4,7 @@ import 'package:random_avatar/random_avatar.dart';
import '../../../../core/network/ws_client.dart';
import '../../../../core/theme/app_theme.dart';
import '../../../../core/theme/frames.dart';
import '../../../../core/theme/ranks.dart';
import '../../domain/entities/game_entities.dart';
import '../bloc/game_state.dart';
@@ -212,25 +213,10 @@ class TableHud extends StatelessWidget {
);
}
/// گرادیانِ قابِ آواتار بر اساسِ نشانِ رتبه (برنز→پادشاه). پیش‌فرض: طلایی.
List<Color> _rankFrame(String tier) {
switch (tier) {
case 'bronze':
return const [Color(0xFFCD9B6A), Color(0xFF7A4A22)];
case 'silver':
return const [Color(0xFFEDF1F4), Color(0xFF98A2AD)];
case 'diamond':
return const [Color(0xFF9BE7F0), Color(0xFF2E8BA0)];
case 'king':
return const [Color(0xFFCE9BEA), Color(0xFF6A2FA0)];
default: // gold و ناشناخته/بات
return const [Color(0xFFF3D27A), AppColors.goldDark];
}
}
/// قابِ نمایشِ آواتارِ یک بازیکن: قابِ اختصاصیِ خریداری‌شده (اگر باشد)، وگرنه قابِ رتبه.
/// قابِ نمایشِ آواتارِ یک بازیکن: قابِ اختصاصیِ خریداری‌شده (اگر باشد)، وگرنه قابِ
/// رتبه (رنگ از سرور). بات‌ها رتبه ندارند ⇒ رنگِ پیش‌فرض.
List<Color> _seatFrame(GamePlayer p) =>
frameGradient(p.frame) ?? _rankFrame(p.bot ? '' : p.rankTier);
frameGradient(p.frame) ?? rankGradient(p.bot ? '' : p.rankTier);
class _PlayerSeat extends StatelessWidget {
final GamePlayer player;