Files
flutterApp/lib/features/pv_control/presentation/theme/pv_hud_theme.dart

144 lines
3.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
/// 遥控模式 HUD(手动控制全屏视图)专用「浅色玻璃」配色。
///
/// 与 pv_control 普通态大屏的深蓝科技风 [PvColors] 完全不同:HUD 以视频铺底,
/// 上层控件全部是「近白半透明卡片 + 柔和投影 + 深墨蓝文字」,让画面不被压暗。
/// 这里独立维护一套常量,避免改动 PvColors 影响普通态页面。
class PvHudColors {
PvHudColors._();
// ===== 面板 =====
/// 卡片 / 面板底色(近白微透明,让视频透出一点层次)
static const Color panel = Color(0xF7FFFFFF);
/// 实白(顶栏 / 悬浮按钮)
static const Color panelSolid = Color(0xFFFFFFFF);
/// 面板描边(极淡冷灰)
static const Color border = Color(0x14203244);
/// 面板投影
static const Color shadow = Color(0x1F0E2233);
// ===== 文字 =====
/// 主文字(深墨蓝)
static const Color textPrimary = Color(0xFF10202E);
/// 次要文字
static const Color textSecondary = Color(0xFF6C7F8F);
/// 更弱的辅助文字
static const Color textTertiary = Color(0xFF9AAAB6);
// ===== 语义色 =====
/// 在线 / 正常 / 运行中 / RTK 固定解
static const Color success = Color(0xFF16B364);
/// 绿色浅底(状态胶囊)
static const Color successBg = Color(0xFFE8F8EF);
/// 蓝色:方向箭头、播放键
static const Color blue = Color(0xFF2F6BFF);
/// 蓝色浅底
static const Color blueBg = Color(0xFFEAF0FF);
/// 危险 / 障碍告警
static const Color danger = Color(0xFFFF3B4E);
/// 危险浅底(未在控制 / 异常状态胶囊)
static const Color dangerBg = Color(0xFFFDECEE);
/// 深色玻璃(摇杆底盘 / 视频浮窗底)
static const Color glassDark = Color(0xCC2A343D);
/// 药丸形控件背景(顶栏按钮、底部条按钮)
static const Color pill = Color(0xFFF1F4F7);
/// 标准卡片装饰:近白底 + 极淡描边 + 柔和投影
static BoxDecoration panelDeco({
double radius = 16,
Color? fill,
double blur = 18,
double alpha = 0.13,
}) {
return BoxDecoration(
color: fill ?? panel,
borderRadius: BorderRadius.circular(radius),
border: Border.all(color: border, width: 1),
boxShadow: [
BoxShadow(
color: shadow.withValues(alpha: alpha),
blurRadius: blur,
offset: const Offset(0, 4),
),
],
);
}
/// 胶囊控件装饰(无投影 / 轻投影)
static BoxDecoration pillDeco({
double radius = 14,
Color? fill,
bool shadowed = false,
}) {
return BoxDecoration(
color: fill ?? pill,
borderRadius: BorderRadius.circular(radius),
boxShadow: shadowed
? [
BoxShadow(
color: shadow.withValues(alpha: 0.1),
blurRadius: 10,
offset: const Offset(0, 2),
),
]
: null,
);
}
/// 绿色状态胶囊(「正常」「运行中」等)
static BoxDecoration successPill({double radius = 10}) {
return BoxDecoration(
color: successBg,
borderRadius: BorderRadius.circular(radius),
);
}
}
/// HUD 文本样式:深色墨蓝一套,交给各组件 copyWith(color:) 调色与缩字号。
class PvHudType {
PvHudType._();
/// 顶栏标题
static const TextStyle title = TextStyle(
color: PvHudColors.textPrimary,
fontSize: 17,
fontWeight: FontWeight.w800,
height: 1.2,
);
/// 卡片内的主数值
static const TextStyle value = TextStyle(
color: PvHudColors.textPrimary,
fontSize: 13,
fontWeight: FontWeight.w700,
height: 1.2,
);
/// 次要标签
static const TextStyle label = TextStyle(
color: PvHudColors.textSecondary,
fontSize: 12,
height: 1.2,
);
/// 更小的辅助文字(单位 / 角标)
static const TextStyle caption = TextStyle(
color: PvHudColors.textTertiary,
fontSize: 10,
height: 1.2,
);
}