Files
front-hokm/lib/core/theme/frames.dart
T
2026-07-08 13:48:29 +03:30

40 lines
1.4 KiB
Dart

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