fix: 优化充值提现和划转界面

- 充值提现弹框: 去掉透明效果,改为实心背景,确保可读性
- 划转界面: 重构为币安风格,账户选择更清晰,交互更自然
- 交易界面: 充值/提现/划转按钮去掉图标,只保留文字
- 整体提升专业金融感
This commit is contained in:
2026-03-30 03:49:31 +08:00
parent 8825fe5b27
commit 9f56be7450
87 changed files with 39348 additions and 39526 deletions

View File

@@ -1,12 +1,10 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import '../../core/theme/app_color_scheme.dart';
import '../../core/theme/app_spacing.dart';
/// GlassPanel - 毛玻璃效果面板
/// GlassPanel - 实心背景面板
///
/// Material Design 3 风格的毛玻璃效果组件
/// 用于卡片、弹窗、底部抽屉等需要毛玻璃效果的容器
/// Material Design 3 风格的实心背景容器
/// 用于卡片、弹窗、底部抽屉等需要清晰背景的容器
///
/// 示例:
/// ```dart
@@ -18,13 +16,10 @@ class GlassPanel extends StatelessWidget {
/// 子组件
final Widget child;
/// 模糊程度,默认 20.0
final double blur;
/// 背景色,默认使用 GlassPanel 背景色
/// 背景色,默认使用 surfaceContainer
final Color? backgroundColor;
/// 边框色,默认使用 GlassPanel 边框色
/// 边框色
final Color? borderColor;
/// 圆角,默认特大圆角
@@ -48,7 +43,6 @@ class GlassPanel extends StatelessWidget {
const GlassPanel({
super.key,
required this.child,
this.blur = 20.0,
this.backgroundColor,
this.borderColor,
this.borderRadius,
@@ -64,32 +58,25 @@ class GlassPanel extends StatelessWidget {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
final bgColor = backgroundColor ??
colorScheme.surfaceBright.withOpacity(isDark ? 0.4 : 0.6);
final brColor = borderColor ??
colorScheme.outlineVariant.withOpacity(0.15);
(isDark ? colorScheme.surfaceContainer : colorScheme.surfaceContainerHigh);
final brColor = borderColor ?? colorScheme.outlineVariant.withOpacity(0.15);
final br = borderRadius ?? BorderRadius.circular(AppRadius.xl);
Widget content = ClipRRect(
borderRadius: br,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: blur, sigmaY: blur),
child: Container(
width: width,
height: height,
padding: padding ?? EdgeInsets.all(AppSpacing.md),
decoration: BoxDecoration(
color: bgColor,
borderRadius: br,
border: showBorder
? Border.all(
color: brColor,
width: 1,
)
: null,
),
child: child,
),
Widget content = Container(
width: width,
height: height,
padding: padding ?? EdgeInsets.all(AppSpacing.md),
decoration: BoxDecoration(
color: bgColor,
borderRadius: br,
border: showBorder
? Border.all(
color: brColor,
width: 1,
)
: null,
),
child: child,
);
if (margin != null) {
@@ -103,7 +90,7 @@ class GlassPanel extends StatelessWidget {
}
}
/// GlassCard - 带毛玻璃效果的卡片
/// GlassCard - 带实心背景的卡片
///
/// 用于列表项、信息展示等场景
/// 预设了常用配置,简化使用
@@ -187,7 +174,7 @@ class GlassCard extends StatelessWidget {
}
}
/// GlassBottomSheet - 毛玻璃底部抽屉
/// GlassBottomSheet - 实心背景底部抽屉
///
/// 用于弹出的底部面板
class GlassBottomSheet extends StatelessWidget {
@@ -218,7 +205,7 @@ class GlassBottomSheet extends StatelessWidget {
return Container(
decoration: BoxDecoration(
color: colorScheme.surfaceBright.withOpacity(isDark ? 0.4 : 0.6),
color: isDark ? colorScheme.surfaceContainer : colorScheme.surfaceContainerHigh,
borderRadius: const BorderRadius.vertical(
top: Radius.circular(AppRadius.xxl),
),
@@ -226,81 +213,73 @@ class GlassBottomSheet extends StatelessWidget {
color: colorScheme.outlineVariant.withOpacity(0.15),
),
),
child: ClipRRect(
borderRadius: const BorderRadius.vertical(
top: Radius.circular(AppRadius.xxl),
),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// 顶部拖动条
Container(
margin: const EdgeInsets.only(top: 12, bottom: 8),
width: 40,
height: 4,
decoration: BoxDecoration(
color: colorScheme.outlineVariant.withOpacity(0.5),
borderRadius: BorderRadius.circular(2),
),
),
// 标题栏
if (title != null || showCloseButton)
Padding(
padding: EdgeInsets.fromLTRB(
AppSpacing.lg,
AppSpacing.sm,
AppSpacing.sm,
AppSpacing.md,
),
child: Row(
children: [
if (title != null)
Expanded(
child: Text(
title!,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: colorScheme.onSurface,
),
),
),
if (showCloseButton)
GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
padding: EdgeInsets.all(AppSpacing.sm),
decoration: BoxDecoration(
color: colorScheme.outlineVariant
.withOpacity(0.2),
shape: BoxShape.circle,
),
child: Icon(
Icons.close,
size: 18,
color: colorScheme.onSurfaceVariant,
),
),
),
],
),
),
// 内容
Padding(
padding: padding ??
EdgeInsets.fromLTRB(
AppSpacing.lg,
0,
AppSpacing.lg,
AppSpacing.xl,
),
child: child,
),
],
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// 顶部拖动条
Container(
margin: const EdgeInsets.only(top: 12, bottom: 8),
width: 40,
height: 4,
decoration: BoxDecoration(
color: colorScheme.outlineVariant.withOpacity(0.5),
borderRadius: BorderRadius.circular(2),
),
),
),
// 标题栏
if (title != null || showCloseButton)
Padding(
padding: EdgeInsets.fromLTRB(
AppSpacing.lg,
AppSpacing.sm,
AppSpacing.sm,
AppSpacing.md,
),
child: Row(
children: [
if (title != null)
Expanded(
child: Text(
title!,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: colorScheme.onSurface,
),
),
),
if (showCloseButton)
GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
padding: EdgeInsets.all(AppSpacing.sm),
decoration: BoxDecoration(
color: colorScheme.outlineVariant
.withOpacity(0.2),
shape: BoxShape.circle,
),
child: Icon(
Icons.close,
size: 18,
color: colorScheme.onSurfaceVariant,
),
),
),
],
),
),
// 内容
Padding(
padding: padding ??
EdgeInsets.fromLTRB(
AppSpacing.lg,
0,
AppSpacing.lg,
AppSpacing.xl,
),
child: child,
),
],
),
);
}