feat: add characters

This commit is contained in:
2026-07-10 00:56:58 +03:30
parent 7c067d36f2
commit 97d156c492
28 changed files with 486 additions and 94 deletions
@@ -13,8 +13,10 @@ class WalletModel extends WalletEntity {
required super.vip,
required super.selectedCard,
required super.selectedCarpet,
super.selectedCarpetImg,
required super.name,
required super.avatar,
super.avatarImg,
super.dailyStreak,
super.bestStreak,
super.dailyReady,
@@ -38,8 +40,10 @@ class WalletModel extends WalletEntity {
vip: (wallet['vip'] ?? false) as bool,
selectedCard: (wallet['selected_card'] ?? 'simple') as String,
selectedCarpet: (wallet['selected_carpet'] ?? 'classic') as String,
selectedCarpetImg: (wallet['selected_carpet_img'] ?? '') as String,
name: (name == null || name.isEmpty) ? 'بازیکن' : name,
avatar: (avatar == null || avatar.isEmpty) ? 'hakem-1' : avatar,
avatarImg: (wallet['selected_avatar_img'] ?? '') as String,
dailyStreak: (wallet['daily_streak'] ?? 0) as int,
bestStreak: (wallet['best_streak'] ?? 0) as int,
dailyReady: (wallet['daily_ready'] ?? true) as bool,
@@ -10,8 +10,10 @@ class WalletEntity {
final bool vip;
final String selectedCard;
final String selectedCarpet;
final String selectedCarpetImg; // URL کاملِ تصویرِ فرش (خالی ⇒ میزِ کلاسیک)
final String name;
final String avatar;
final String avatarImg; // شخصیتِ آواتارِ انتخابی (<id>.<ext>؛ خالی ⇒ تصادفی)
final int dailyStreak; // روزهای پیاپیِ دریافتِ سکه‌ی روزانه
final int bestStreak;
final bool dailyReady; // آیا امروز سکه‌ی روزانه قابلِ دریافت است
@@ -28,8 +30,10 @@ class WalletEntity {
required this.vip,
required this.selectedCard,
required this.selectedCarpet,
this.selectedCarpetImg = '',
required this.name,
required this.avatar,
this.avatarImg = '',
this.dailyStreak = 0,
this.bestStreak = 0,
this.dailyReady = true,
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:random_avatar/random_avatar.dart';
import '../../../../core/theme/app_theme.dart';
import '../../../../core/widgets/game_ui.dart';
import '../../../../core/widgets/player_avatar.dart';
import '../../../auth/presentation/bloc/auth_bloc.dart';
import '../../../auth/presentation/bloc/auth_event.dart';
import '../../domain/entities/wallet_entity.dart';
@@ -350,7 +350,7 @@ class _TopBar extends StatelessWidget {
child:
(w == null || w.avatar.isEmpty)
? const Icon(Icons.person, color: AppColors.gold)
: ClipOval(child: RandomAvatar(w.avatar)),
: PlayerAvatar(seed: w.avatar, imageUrl: w.avatarImg),
),
),
const SizedBox(width: 10),