feat(ui): 应用新设计系统到 Flutter 项目

- 更新颜色系统为 Material Design 3
  * Primary: #72dcff (青色)
  * Secondary: #dd8bfb (紫色)
  * Tertiary: #afffd1 (绿色)

- 创建新的 UI 组件
  * GlassPanel: 毛玻璃效果面板
  * NeonGlow: 霓虹光效组件
  * GradientButton: 渐变按钮组件

- 更新所有页面样式
  * 交易页面 (trade_page.dart)
  * 行情页面 (market_page.dart)
  * 资产页面 (asset_page.dart)
  * 我的页面 (mine_page.dart)
  * 订单页面 (orders_page.dart)

- 支持深色和浅色主题
- 所有 UI 文字使用中文
- 保持现有 API 接口不变

变更统计:
- 9 个文件修改
- 1,893 行新增
- 691 行删除
- 3 个新组件
This commit is contained in:
2026-03-24 02:16:19 +08:00
parent dc61d845a5
commit df0e8beba9
11 changed files with 2625 additions and 705 deletions

View File

@@ -1,52 +1,96 @@
import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
/// "The Kinetic Vault" & "The Ethereal Terminal" 双主题颜色系统
/// Material Design 3 颜色系统 - "The Kinetic Vault" & "The Ethereal Terminal"
///
/// 深色主题: "The Kinetic Vault" - 高端加密编辑风格
/// 深色主题: "The Kinetic Vault" - 赛博朋克风格
/// 浅色主题: "The Ethereal Terminal" - 高端金融科技风格
///
/// 设计原则:
/// - 无边框规则: 禁止 1px solid 边框,使用层次色变化
/// - 层次化设计: 通过 surface-container 层次而非阴影
/// - Material Design 3 配色方案
/// - Glass Panel 毛玻璃效果
/// - Neon Glow 霓虹光效
/// - 渐变 CTA: primary → primary_container (135度)
class AppColorScheme {
AppColorScheme._();
// ============================================
// 深色主题 - "The Kinetic Vault"
// 深色主题 - "The Kinetic Vault" (Material Design 3)
// ============================================
/// 背景基色 - 最深
static const Color darkBackground = Color(0xFF0b0e14);
/// Surface 层次 (从低到高)
static const Color darkSurfaceLowest = Color(0xFF0d1017);
/// Surface 层次 (从低到高) - Material Design 3 规范
static const Color darkSurfaceDim = Color(0xFF0b0e14);
static const Color darkSurfaceLowest = Color(0xFF000000);
static const Color darkSurfaceLow = Color(0xFF10131a);
static const Color darkSurface = Color(0xFF151921);
static const Color darkSurfaceHigh = Color(0xFF1a1f2a);
static const Color darkSurfaceHighest = Color(0xFF22262f);
static const Color darkSurface = Color(0xFF0b0e14);
static const Color darkSurfaceContainer = Color(0xFF161a21);
static const Color darkSurfaceContainerHigh = Color(0xFF1c2028);
static const Color darkSurfaceContainerHighest = Color(0xFF22262f);
static const Color darkSurfaceBright = Color(0xFF282c36);
static const Color darkSurfaceVariant = Color(0xFF22262f);
/// Ghost Border - 后备边框
/// 兼容旧名称
static const Color darkSurfaceContainerLowest = darkSurfaceLowest;
static const Color darkSurfaceContainerLow = darkSurfaceLow;
static const Color darkSurfaceHigh = darkSurfaceContainerHigh;
static const Color darkSurfaceHighest = darkSurfaceContainerHighest;
/// Ghost Border
static const Color darkOutline = Color(0xFF73757d);
static const Color darkOutlineVariant = Color(0xFF45484f);
/// Primary - Neon Blue (主要交互)
/// Primary - Neon Cyan (青色 - 主要交互)
static const Color darkPrimary = Color(0xFF72dcff);
static const Color darkPrimaryContainer = Color(0xFF4ac8f0);
static const Color darkPrimaryDim = Color(0xFF00c3ed);
static const Color darkPrimaryContainer = Color(0xFF00d2ff);
static const Color darkPrimaryFixed = Color(0xFF00d2ff);
static const Color darkPrimaryFixedDim = Color(0xFF00c3ed);
static const Color darkOnPrimary = Color(0xFF004c5e);
static const Color darkOnPrimaryContainer = Color(0xFF004253);
static const Color darkOnPrimaryFixed = Color(0xFF002c38);
static const Color darkOnPrimaryFixedVariant = Color(0xFF004c5e);
/// Secondary - Electric Purple (次要强调)
/// Secondary - Electric Purple (紫色 - 次要强调)
static const Color darkSecondary = Color(0xFFdd8bfb);
static const Color darkSecondaryContainer = Color(0xFF2d1f3d);
static const Color darkSecondaryDim = Color(0xFFce7eec);
static const Color darkSecondaryContainer = Color(0xFF6e208c);
static const Color darkSecondaryFixed = Color(0xFFf2c1ff);
static const Color darkSecondaryFixedDim = Color(0xFFebadff);
static const Color darkOnSecondary = Color(0xFF4c0068);
static const Color darkOnSecondaryContainer = Color(0xFFf1bfff);
static const Color darkOnSecondaryFixed = Color(0xFF580078);
static const Color darkOnSecondaryFixedVariant = Color(0xFF792c97);
/// Tertiary - Emerald Green (仅用于成功/盈利/买入)
/// Tertiary - Neon Green (绿色 - 仅用于成功/盈利/买入)
static const Color darkTertiary = Color(0xFFafffd1);
static const Color darkTertiaryContainer = Color(0xFF1a3d2d);
static const Color darkTertiaryDim = Color(0xFF00efa0);
static const Color darkTertiaryContainer = Color(0xFF00ffab);
static const Color darkTertiaryFixed = Color(0xFF00ffab);
static const Color darkTertiaryFixedDim = Color(0xFF00efa0);
static const Color darkOnTertiary = Color(0xFF006642);
static const Color darkOnTertiaryContainer = Color(0xFF005c3b);
static const Color darkOnTertiaryFixed = Color(0xFF00472d);
static const Color darkOnTertiaryFixedVariant = Color(0xFF006742);
/// Error - Neon Red (红色 - 错误/卖出)
static const Color darkError = Color(0xFFff716c);
static const Color darkErrorDim = Color(0xFFd7383b);
static const Color darkErrorContainer = Color(0xFF9f0519);
static const Color darkOnError = Color(0xFF490006);
static const Color darkOnErrorContainer = Color(0xFFffa8a3);
/// 文本色
static const Color darkOnSurface = Color(0xFFecedf6);
static const Color darkOnSurfaceVariant = Color(0xFFa9abb3);
static const Color darkOnSurfaceMuted = Color(0xFF6b6d75);
static const Color darkOnBackground = Color(0xFFecedf6);
static const Color darkInverseSurface = Color(0xFFf9f9ff);
static const Color darkInverseOnSurface = Color(0xFF52555c);
static const Color darkInversePrimary = Color(0xFF00687f);
static const Color darkSurfaceTint = Color(0xFF72dcff);
// ============================================
// 浅色主题 - "The Ethereal Terminal"
@@ -56,11 +100,11 @@ class AppColorScheme {
static const Color lightBackground = Color(0xFFf5f7f9);
/// Surface 层次 (从低到高)
static const Color lightSurfaceLowest = Color(0xFFffffff); // Elevated (pop)
static const Color lightSurfaceLow = Color(0xFFeef1f3); // Softly recessed
static const Color lightSurface = Color(0xFFf5f7f9); // Base canvas
static const Color lightSurfaceHigh = Color(0xFFe8ebef); // Elevated
static const Color lightSurfaceHighest = Color(0xFFd9dde0); // Navigation anchor
static const Color lightSurfaceLowest = Color(0xFFffffff);
static const Color lightSurfaceLow = Color(0xFFeef1f3);
static const Color lightSurface = Color(0xFFf5f7f9);
static const Color lightSurfaceHigh = Color(0xFFe8ebef);
static const Color lightSurfaceHighest = Color(0xFFd9dde0);
/// Ghost Border
static const Color lightOutlineVariant = Color(0xFFc4c8cc);
@@ -82,6 +126,29 @@ class AppColorScheme {
static const Color lightOnSurfaceVariant = Color(0xFF5a5d60);
static const Color lightOnSurfaceMuted = Color(0xFF8a8d90);
// ============================================
// Glass Panel 毛玻璃效果颜色
// ============================================
/// Glass Panel 背景色 - rgba(34, 38, 47, 0.4)
static const Color glassPanelBackground = Color(0x6622262f);
/// Glass Panel 边框色 - rgba(69, 72, 79, 0.15)
static const Color glassPanelBorder = Color(0x2645484f);
// ============================================
// Neon Glow 霓虹光效颜色
// ============================================
/// Primary Glow - rgba(114, 220, 255, 0.15)
static const Color neonGlowPrimary = Color(0x2672dcff);
/// Secondary Glow - rgba(221, 139, 251, 0.15)
static const Color neonGlowSecondary = Color(0x26dd8bfb);
/// Tertiary Glow - rgba(175, 255, 209, 0.2)
static const Color neonGlowTertiary = Color(0x33afffd1);
// ============================================
// 语义色 - 明暗通用
// ============================================
@@ -90,10 +157,13 @@ class AppColorScheme {
static const Color up = darkTertiary;
static const Color success = darkTertiary;
/// 跌/卖出/错误
static const Color down = Color(0xFFFF5252);
/// 跌/卖出/错误 - 使用 Material Design 3 error
static const Color down = Color(0xFFff716c);
static const Color error = down;
/// 静默/禁用/次要
static const Color muted = darkOnSurfaceVariant;
/// 警告
static const Color warning = Color(0xFFFF9800);
@@ -123,14 +193,14 @@ class AppColorScheme {
/// 买入按钮渐变
static const LinearGradient buyGradient = LinearGradient(
colors: [darkTertiary, Color(0xFF7de8b8)],
colors: [darkTertiary, darkTertiaryContainer],
begin: Alignment(-0.7, -0.7),
end: Alignment(0.7, 0.7),
);
/// 卖出按钮渐变
static const LinearGradient sellGradient = LinearGradient(
colors: [down, Color(0xFFe84545)],
colors: [darkError, darkErrorDim],
begin: Alignment(-0.7, -0.7),
end: Alignment(0.7, 0.7),
);
@@ -149,15 +219,15 @@ class AppColorScheme {
static ShadColorScheme get darkShad => ShadColorScheme(
background: darkBackground,
foreground: darkOnSurface,
card: darkSurface,
card: darkSurfaceContainer,
cardForeground: darkOnSurface,
popover: darkSurfaceHigh,
popover: darkSurfaceContainerHigh,
popoverForeground: darkOnSurface,
primary: darkPrimary,
primaryForeground: darkBackground,
primaryForeground: darkOnPrimary,
secondary: darkSecondary,
secondaryForeground: darkOnSurface,
muted: darkSurfaceHigh,
muted: darkSurfaceContainerHigh,
mutedForeground: darkOnSurfaceVariant,
accent: darkPrimary.withValues(alpha: 0.15),
accentForeground: darkPrimary,
@@ -181,7 +251,7 @@ class AppColorScheme {
popover: lightSurfaceLowest,
popoverForeground: lightOnSurface,
primary: lightPrimary,
primaryForeground: Color(0xFFFFFFFF),
primaryForeground: const Color(0xFFFFFFFF),
secondary: lightSecondary,
secondaryForeground: lightOnSurface,
muted: lightSurfaceHigh,
@@ -189,7 +259,7 @@ class AppColorScheme {
accent: lightPrimary.withValues(alpha: 0.1),
accentForeground: lightPrimary,
destructive: error,
destructiveForeground: Color(0xFFFFFFFF),
destructiveForeground: const Color(0xFFFFFFFF),
border: lightOutlineVariant.withValues(alpha: 0.5),
input: lightOutlineVariant.withValues(alpha: 0.3),
ring: lightPrimary,
@@ -197,26 +267,42 @@ class AppColorScheme {
);
// ============================================
// Material ColorScheme - 深色主题
// Material ColorScheme - 深色主题 (Material Design 3)
// ============================================
static ColorScheme get darkMaterial => ColorScheme.dark(
primary: darkPrimary,
onPrimary: darkBackground,
onPrimary: darkOnPrimary,
primaryContainer: darkPrimaryContainer,
onPrimaryContainer: darkOnPrimaryContainer,
secondary: darkSecondary,
onSecondary: darkOnSurface,
onSecondary: darkOnSecondary,
secondaryContainer: darkSecondaryContainer,
onSecondaryContainer: darkOnSecondaryContainer,
tertiary: darkTertiary,
onTertiary: darkBackground,
error: error,
onError: darkOnSurface,
onTertiary: darkOnTertiary,
tertiaryContainer: darkTertiaryContainer,
onTertiaryContainer: darkOnTertiaryContainer,
error: darkError,
onError: darkOnError,
errorContainer: darkErrorContainer,
onErrorContainer: darkOnErrorContainer,
surface: darkSurface,
onSurface: darkOnSurface,
surfaceDim: darkSurfaceDim,
surfaceBright: darkSurfaceBright,
surfaceContainerLowest: darkSurfaceLowest,
surfaceContainerLow: darkSurfaceLow,
surfaceContainer: darkSurface,
surfaceContainerHigh: darkSurfaceHigh,
surfaceContainerHighest: darkSurfaceHighest,
surfaceContainer: darkSurfaceContainer,
surfaceContainerHigh: darkSurfaceContainerHigh,
surfaceContainerHighest: darkSurfaceContainerHighest,
onSurfaceVariant: darkOnSurfaceVariant,
outline: darkOutline,
outlineVariant: darkOutlineVariant,
inverseSurface: darkInverseSurface,
onInverseSurface: darkInverseOnSurface,
inversePrimary: darkInversePrimary,
surfaceTint: darkSurfaceTint,
);
// ============================================
@@ -225,13 +311,13 @@ class AppColorScheme {
static ColorScheme get lightMaterial => ColorScheme.light(
primary: lightPrimary,
onPrimary: Color(0xFFFFFFFF),
onPrimary: const Color(0xFFFFFFFF),
secondary: lightSecondary,
onSecondary: Color(0xFFFFFFFF),
onSecondary: const Color(0xFFFFFFFF),
tertiary: lightTertiary,
onTertiary: Color(0xFFFFFFFF),
onTertiary: const Color(0xFFFFFFFF),
error: error,
onError: Color(0xFFFFFFFF),
onError: const Color(0xFFFFFFFF),
surface: lightSurface,
onSurface: lightOnSurface,
surfaceContainerLowest: lightSurfaceLowest,
@@ -255,14 +341,14 @@ class AppColorScheme {
@Deprecated('Use darkBackground instead')
static const Color _darkBackground = darkBackground;
@Deprecated('Use darkSurface instead')
static const Color _darkCardBackground = darkSurface;
@Deprecated('Use darkSurfaceContainer instead')
static const Color _darkCardBackground = darkSurfaceContainer;
@Deprecated('Use darkSurfaceHigh instead')
static const Color _darkSecondary = darkSurfaceHigh;
@Deprecated('Use darkSurfaceContainerHigh instead')
static const Color _darkSecondary = darkSurfaceContainerHigh;
@Deprecated('Use darkSurfaceHigh instead')
static const Color _darkMuted = darkSurfaceHigh;
@Deprecated('Use darkSurfaceContainerHigh instead')
static const Color _darkMuted = darkSurfaceContainerHigh;
@Deprecated('Use darkOutlineVariant instead')
static const Color _darkBorder = darkOutlineVariant;