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
@@ -1,5 +1,7 @@
import '../../../../../core/locator/locator.dart';
import '../../../../../core/network/api_provider_imp.dart';
import '../../../../../core/theme/frames.dart';
import '../../../../../core/theme/ranks.dart';
import '../../../domain/entities/frame.dart';
/// دادهٔ قاب‌های آواتار از backend (دریافت، خرید، انتخاب).
@@ -12,12 +14,34 @@ class FrameApiProvider {
throw Exception('frames: ${res.statusCode}');
}
final list = (res.data['frames'] as List?) ?? const [];
return FrameCatalog(
frames: list
.map((e) => AvatarFrame.fromJson(Map<String, dynamic>.from(e as Map)))
.toList(),
selected: (res.data['selected'] ?? '') as String,
final frames = list
.map((e) => AvatarFrame.fromJson(Map<String, dynamic>.from(e as Map)))
.toList();
// کشِ رنگِ قاب‌ها را به‌روزرسانی کن تا HUD رنگِ درست را از سرور بگیرد.
FrameStyles.I.setFromCatalog(
frames.map((f) => (id: f.id, c1: f.c1, c2: f.c2)),
);
// کشِ رنگ/برچسبِ رتبه‌ها هم از همین پاسخ پر می‌شود.
final tiers = (res.data['rank_tiers'] as List?) ?? const [];
RankStyles.I.setFromCatalog(
tiers.map((e) {
final m = Map<String, dynamic>.from(e as Map);
return (
id: (m['id'] ?? '') as String,
label: (m['label'] ?? '') as String,
c1: (m['c1'] ?? '') as String,
c2: (m['c2'] ?? '') as String,
);
}),
);
return FrameCatalog(frames: frames, selected: (res.data['selected'] ?? '') as String);
}
/// کشِ رنگِ قاب‌ها را از سرور گرم می‌کند (best-effort؛ برای رندرِ قابِ دیگران).
Future<void> warmCache() async {
try {
await getFrames();
} catch (_) {}
}
/// خرید؛ null یعنی موفق، وگرنه پیامِ خطای فارسی.