import 'package:flutter/material.dart'; import 'app_theme.dart'; /// کشِ رنگ و برچسبِ رتبه‌ها که از سرور می‌آید (tier → گرادیان/برچسب). با هر بار /// خواندنِ کاتالوگِ قاب‌ها پر می‌شود؛ تا آن لحظه از fallbackِ خنثی استفاده می‌شود. class RankStyles { RankStyles._(); static final RankStyles I = RankStyles._(); final Map> _grad = {}; final Map _label = {}; /// کش را از کاتالوگِ سرور پر می‌کند. هر آیتم id/label/c1/c2 دارد. void setFromCatalog( Iterable<({String id, String label, String c1, String c2})> tiers, ) { for (final t in tiers) { final g = _parse(t.c1, t.c2); if (g != null) _grad[t.id] = g; if (t.label.isNotEmpty) _label[t.id] = t.label; } } /// گرادیانِ رتبه (از سرور، وگرنه fallbackِ خنثیِ طلایی). List gradient(String tier) => _grad[tier] ?? _fallbackGrad; /// برچسبِ فارسیِ رتبه (از سرور، وگرنه خودِ شناسه). String label(String tier) => _label[tier] ?? tier; static const _fallbackGrad = [AppColors.gold, AppColors.goldDark]; static List? _parse(String c1, String c2) { final a = _hex(c1), b = _hex(c2); if (a == null || b == null) return null; return [a, b]; } static Color? _hex(String s) { s = s.trim().replaceAll('#', ''); if (s.length != 6) return null; final v = int.tryParse(s, radix: 16); return v == null ? null : Color(0xFF000000 | v); } } /// گرادیانِ رنگیِ رتبه (از کشِ سرور). List rankGradient(String tier) => RankStyles.I.gradient(tier); /// برچسبِ فارسیِ رتبه (از کشِ سرور). String rankLabel(String tier) => RankStyles.I.label(tier);