fix: frames
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'app_theme.dart';
|
||||
|
||||
/// کشِ رنگ و برچسبِ رتبهها که از سرور میآید (tier → گرادیان/برچسب). با هر بار
|
||||
/// خواندنِ کاتالوگِ قابها پر میشود؛ تا آن لحظه از fallbackِ خنثی استفاده میشود.
|
||||
class RankStyles {
|
||||
RankStyles._();
|
||||
static final RankStyles I = RankStyles._();
|
||||
|
||||
final Map<String, List<Color>> _grad = {};
|
||||
final Map<String, String> _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<Color> gradient(String tier) => _grad[tier] ?? _fallbackGrad;
|
||||
|
||||
/// برچسبِ فارسیِ رتبه (از سرور، وگرنه خودِ شناسه).
|
||||
String label(String tier) => _label[tier] ?? tier;
|
||||
|
||||
static const _fallbackGrad = [AppColors.gold, AppColors.goldDark];
|
||||
|
||||
static List<Color>? _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<Color> rankGradient(String tier) => RankStyles.I.gradient(tier);
|
||||
|
||||
/// برچسبِ فارسیِ رتبه (از کشِ سرور).
|
||||
String rankLabel(String tier) => RankStyles.I.label(tier);
|
||||
Reference in New Issue
Block a user