fix(ui): 修复主题切换功能,支持明暗主题动态切换

- 替换所有硬编码颜色为动态颜色
- 所有页面使用 Theme.of(context) 获取主题颜色
- 支持深色和浅色主题切换
- 修复 GlassPanel 和 NeonGlow 组件的主题适配
- 完善 lightMaterial ColorScheme 定义
- 测试主题切换功能正常

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-24 02:50:25 +08:00
parent 7bb426b3d8
commit a65aa0fa86
94 changed files with 17889 additions and 17478 deletions

View File

@@ -94,7 +94,7 @@ class NeonGlow extends StatelessWidget {
}) {
return NeonGlow(
key: key,
glowColor: AppColorScheme.darkError.withValues(alpha: 0.3),
glowColor: AppColorScheme.down.withOpacity(0.3),
blurRadius: blurRadius,
borderRadius: borderRadius,
child: child,
@@ -205,65 +205,77 @@ class _NeonButtonState extends State<NeonButton>
}
Color get _backgroundColor {
final isDark = Theme.of(context).brightness == Brightness.dark;
final colorScheme = Theme.of(context).colorScheme;
switch (widget.type) {
case NeonButtonType.primary:
return AppColorScheme.darkPrimary;
return colorScheme.primary;
case NeonButtonType.secondary:
return AppColorScheme.darkSecondary;
return colorScheme.secondary;
case NeonButtonType.tertiary:
return AppColorScheme.darkTertiary;
return AppColorScheme.up;
case NeonButtonType.error:
return AppColorScheme.darkError;
return AppColorScheme.down;
case NeonButtonType.outline:
return Colors.transparent;
}
}
Color get _foregroundColor {
final isDark = Theme.of(context).brightness == Brightness.dark;
final colorScheme = Theme.of(context).colorScheme;
switch (widget.type) {
case NeonButtonType.primary:
return AppColorScheme.darkOnPrimaryFixed;
return isDark ? AppColorScheme.darkOnPrimary : const Color(0xFFFFFFFF);
case NeonButtonType.secondary:
return AppColorScheme.darkOnSecondary;
return isDark ? AppColorScheme.darkOnSecondary : const Color(0xFFFFFFFF);
case NeonButtonType.tertiary:
return AppColorScheme.darkOnTertiaryFixed;
return isDark ? AppColorScheme.darkOnTertiary : const Color(0xFFFFFFFF);
case NeonButtonType.error:
return AppColorScheme.darkOnError;
return const Color(0xFFFFFFFF);
case NeonButtonType.outline:
return AppColorScheme.darkPrimary;
return colorScheme.primary;
}
}
Color get _glowColor {
final isDark = Theme.of(context).brightness == Brightness.dark;
final colorScheme = Theme.of(context).colorScheme;
switch (widget.type) {
case NeonButtonType.primary:
return AppColorScheme.neonGlowPrimary;
return colorScheme.primary.withOpacity(isDark ? 0.15 : 0.08);
case NeonButtonType.secondary:
return AppColorScheme.neonGlowSecondary;
return colorScheme.secondary.withOpacity(isDark ? 0.15 : 0.08);
case NeonButtonType.tertiary:
return AppColorScheme.neonGlowTertiary;
return AppColorScheme.up.withOpacity(isDark ? 0.2 : 0.1);
case NeonButtonType.error:
return AppColorScheme.darkError.withValues(alpha: 0.3);
return AppColorScheme.down.withOpacity(0.3);
case NeonButtonType.outline:
return AppColorScheme.neonGlowPrimary;
return colorScheme.primary.withOpacity(isDark ? 0.15 : 0.08);
}
}
LinearGradient? get _gradient {
if (widget.type == NeonButtonType.outline) return null;
final isDark = Theme.of(context).brightness == Brightness.dark;
final colorScheme = Theme.of(context).colorScheme;
switch (widget.type) {
case NeonButtonType.primary:
return const LinearGradient(
colors: [AppColorScheme.darkPrimary, AppColorScheme.darkPrimaryContainer],
begin: Alignment(-0.7, -0.7),
end: Alignment(0.7, 0.7),
return LinearGradient(
colors: [colorScheme.primary, colorScheme.primaryContainer],
begin: const Alignment(-0.7, -0.7),
end: const Alignment(0.7, 0.7),
);
case NeonButtonType.secondary:
return const LinearGradient(
colors: [AppColorScheme.darkSecondary, AppColorScheme.darkSecondaryFixed],
begin: Alignment(-0.7, -0.7),
end: Alignment(0.7, 0.7),
return LinearGradient(
colors: [colorScheme.secondary, colorScheme.secondaryContainer ?? colorScheme.secondary],
begin: const Alignment(-0.7, -0.7),
end: const Alignment(0.7, 0.7),
);
case NeonButtonType.tertiary:
return AppColorScheme.buyGradient;
@@ -276,6 +288,9 @@ class _NeonButtonState extends State<NeonButton>
@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
final button = GestureDetector(
onTapDown: widget.onPressed != null ? _onTapDown : null,
onTapUp: widget.onPressed != null ? _onTapUp : null,
@@ -292,7 +307,7 @@ class _NeonButtonState extends State<NeonButton>
borderRadius: BorderRadius.circular(AppRadius.xxl),
border: widget.type == NeonButtonType.outline
? Border.all(
color: AppColorScheme.darkOutlineVariant.withValues(alpha: 0.3),
color: colorScheme.outlineVariant.withOpacity(0.3),
)
: null,
),