import 'package:flutter/material.dart'; /// کشِ رنگِ قاب‌ها که از سرور می‌آید (id → گرادیان). با هر بار خواندنِ کاتالوگِ /// قاب‌ها پر می‌شود؛ هیچ رنگی سمتِ کلاینت hardcode نیست (تا کش پر نشود، null). class FrameStyles { FrameStyles._(); static final FrameStyles I = FrameStyles._(); final Map> _cache = {}; /// کشِ رنگ‌ها را از کاتالوگِ سرور پر می‌کند. هر آیتم باید id و دو رنگِ hex بدهد. void setFromCatalog(Iterable<({String id, String c1, String c2})> frames) { for (final f in frames) { final g = _parse(f.c1, f.c2); if (g != null) _cache[f.id] = g; } } List? gradient(String id) { if (id.isEmpty || id == 'none') return null; return _cache[id]; } 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); } } /// گرادیانِ قابِ آواتار (از کشِ سرور). null ⇒ قابِ رتبه. List? frameGradient(String id) => FrameStyles.I.gradient(id);