refactor(theme): 迁移主题感知颜色至 ThemeExtension

- 创建 AppThemeColors ThemeExtension 类,统一管理主题感知颜色(涨跌色、卡片背景、渐变等)
- 从 AppColorScheme 移除主题感知辅助函数,仅保留静态颜色常量
- 在 AppTheme 中注册 ThemeExtension,支持深色/浅色主题工厂
- 重构所有 UI 组件使用 context.appColors 访问主题颜色,替代硬编码的 AppColorScheme 方法调用
- 移除组件中重复的 isDark 判断逻辑,简化颜色获取方式
- 保持向后兼容性,所有现有功能不变
This commit is contained in:
2026-04-06 01:58:08 +08:00
parent 396668aa43
commit 7ed2435a4c
36 changed files with 658 additions and 810 deletions

View File

@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import 'package:flutter_animate/flutter_animate.dart';
import '../../core/theme/app_color_scheme.dart';
import '../../core/theme/app_spacing.dart';
import '../../core/theme/app_theme_extension.dart';
/// 资产卡片组件 - 用于显示资产总览
///
@@ -21,24 +21,6 @@ class AssetCard extends StatelessWidget {
final Gradient? gradient;
final VoidCallback? onTap;
/// 默认渐变色 - Neon Blue → Electric Purple
static LinearGradient defaultGradientBuilder(bool isDark) => LinearGradient(
colors: isDark
? [AppColorScheme.darkPrimary, AppColorScheme.darkSecondary]
: [AppColorScheme.lightPrimary, AppColorScheme.lightSecondary],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
);
/// 翡翠渐变 - 用于盈利展示(主题感知)
static LinearGradient getEmeraldGradient(bool isDark) => LinearGradient(
colors: isDark
? [AppColorScheme.darkTertiary, const Color(0xFF7de8b8)]
: [AppColorScheme.lightTertiary, const Color(0xFF00c987)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
);
const AssetCard({
super.key,
this.title = '总资产',
@@ -54,9 +36,9 @@ class AssetCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = ShadTheme.of(context);
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
final cardGradient = gradient ?? defaultGradientBuilder(isDark);
final colorScheme = context.colors;
final appColors = context.appColors;
final cardGradient = gradient ?? appColors.assetGradient;
// 主题感知颜色 - 在渐变背景上使用 onPrimary
final primaryTextColor = colorScheme.onPrimary;
@@ -197,6 +179,7 @@ class AssetCardCompact extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = ShadTheme.of(context);
final appColors = context.appColors;
final isValueUp = isUp ?? true;
return ShadCard(
@@ -227,13 +210,13 @@ class AssetCardCompact extends StatelessWidget {
Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
decoration: BoxDecoration(
color: AppColorScheme.getChangeBackgroundColor(isValueUp),
color: isValueUp ? appColors.upBackground : appColors.downBackground,
borderRadius: BorderRadius.circular(AppRadius.sm),
),
child: Text(
change!,
style: TextStyle(
color: AppColorScheme.getChangeColor(isValueUp),
color: isValueUp ? appColors.up : appColors.down,
fontWeight: FontWeight.w600,
),
),