This commit is contained in:
sion
2026-03-30 00:30:42 +08:00
parent 41c1288616
commit 2a901de2c3
27 changed files with 1324 additions and 650 deletions

View File

@@ -88,11 +88,11 @@ class _HomePageState extends State<HomePage>
),
SizedBox(height: AppSpacing.md),
// 新人福利卡片
if (!_bonusClaimed)
_BonusCard(
onClaim: _claimBonus,
isLoading: _bonusLoading,
),
_BonusCard(
isClaimed: _bonusClaimed,
onClaim: _claimBonus,
isLoading: _bonusLoading,
),
SizedBox(height: AppSpacing.lg),
// 持仓
_HoldingsSection(holdings: provider.holdings),
@@ -963,105 +963,118 @@ class _AssetCardState extends State<_AssetCard> {
/// 新人福利卡片
class _BonusCard extends StatelessWidget {
final bool isClaimed;
final VoidCallback onClaim;
final bool isLoading;
const _BonusCard({required this.onClaim, required this.isLoading});
const _BonusCard({required this.isClaimed, required this.onClaim, required this.isLoading});
@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
return GestureDetector(
onTap: isLoading ? null : onClaim,
child: Container(
width: double.infinity,
padding: EdgeInsets.all(AppSpacing.lg),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
colorScheme.primary.withOpacity(0.15),
colorScheme.secondary.withOpacity(0.1),
],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
return Opacity(
opacity: isClaimed ? 0.6 : 1.0,
child: GestureDetector(
onTap: isClaimed || isLoading ? null : onClaim,
child: Container(
width: double.infinity,
padding: EdgeInsets.all(AppSpacing.lg),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
colorScheme.primary.withOpacity(0.15),
colorScheme.secondary.withOpacity(0.1),
],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
borderRadius: BorderRadius.circular(AppRadius.xl),
border: Border.all(color: colorScheme.primary.withOpacity(0.2)),
),
borderRadius: BorderRadius.circular(AppRadius.xl),
border: Border.all(color: colorScheme.primary.withOpacity(0.2)),
),
child: Row(
children: [
// 左侧图标
Container(
width: 48,
height: 48,
decoration: BoxDecoration(
color: colorScheme.primary.withOpacity(0.15),
borderRadius: BorderRadius.circular(AppRadius.lg),
child: Row(
children: [
// 左侧图标
Container(
width: 48,
height: 48,
decoration: BoxDecoration(
color: isClaimed
? colorScheme.onSurfaceVariant.withOpacity(0.1)
: colorScheme.primary.withOpacity(0.15),
borderRadius: BorderRadius.circular(AppRadius.lg),
),
child: Icon(
isClaimed ? LucideIcons.check : LucideIcons.gift,
color: isClaimed ? AppColorScheme.up : colorScheme.primary,
size: 24,
),
),
child: Icon(
LucideIcons.gift,
color: colorScheme.primary,
size: 24,
),
),
SizedBox(width: AppSpacing.md),
// 中间文字
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'新人福利',
style: GoogleFonts.spaceGrotesk(
fontSize: 16,
fontWeight: FontWeight.bold,
color: colorScheme.onSurface,
),
),
SizedBox(height: AppSpacing.xs),
Text(
'领取 50 USDT 体验金,开始您的交易之旅',
style: TextStyle(
fontSize: 12,
color: colorScheme.onSurfaceVariant,
),
),
],
),
),
// 右侧按钮
Container(
padding: EdgeInsets.symmetric(
horizontal: AppSpacing.md,
vertical: AppSpacing.sm,
),
decoration: BoxDecoration(
gradient: isDark
? AppColorScheme.darkCtaGradient
: AppColorScheme.lightCtaGradient,
borderRadius: BorderRadius.circular(AppRadius.full),
),
child: isLoading
? SizedBox(
width: 16,
height: 16,
child: CircularProgressIndicator(
strokeWidth: 2,
color: isDark ? colorScheme.background : Colors.white,
SizedBox(width: AppSpacing.md),
// 中间文字
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'新人福利',
style: GoogleFonts.spaceGrotesk(
fontSize: 16,
fontWeight: FontWeight.bold,
color: colorScheme.onSurface,
),
)
: Text(
'立即领取',
),
SizedBox(height: AppSpacing.xs),
Text(
isClaimed ? '50 USDT 体验金已到账' : '领取 50 USDT 体验金,开始您的交易之旅',
style: TextStyle(
color: isDark ? colorScheme.background : Colors.white,
fontSize: 13,
fontWeight: FontWeight.w700,
fontSize: 12,
color: colorScheme.onSurfaceVariant,
),
),
),
],
],
),
),
// 右侧按钮
Container(
padding: EdgeInsets.symmetric(
horizontal: AppSpacing.md,
vertical: AppSpacing.sm,
),
decoration: BoxDecoration(
color: isClaimed
? colorScheme.onSurfaceVariant.withOpacity(0.15)
: null,
gradient: isClaimed
? null
: (isDark
? AppColorScheme.darkCtaGradient
: AppColorScheme.lightCtaGradient),
borderRadius: BorderRadius.circular(AppRadius.full),
),
child: isLoading
? SizedBox(
width: 16,
height: 16,
child: CircularProgressIndicator(
strokeWidth: 2,
color: isDark ? colorScheme.background : Colors.white,
),
)
: Text(
isClaimed ? '已领取' : '立即领取',
style: TextStyle(
color: isClaimed
? colorScheme.onSurfaceVariant
: (isDark ? colorScheme.background : Colors.white),
fontSize: 13,
fontWeight: FontWeight.w700,
),
),
),
],
),
),
),
);