diff --git a/frontend/mining-app/lib/presentation/pages/contribution/contribution_page.dart b/frontend/mining-app/lib/presentation/pages/contribution/contribution_page.dart index a14b2ced..8692a9b7 100644 --- a/frontend/mining-app/lib/presentation/pages/contribution/contribution_page.dart +++ b/frontend/mining-app/lib/presentation/pages/contribution/contribution_page.dart @@ -5,8 +5,10 @@ import '../../../core/constants/app_colors.dart'; import '../../../core/router/routes.dart'; import '../../../core/utils/format_utils.dart'; import '../../../domain/entities/contribution.dart'; +import '../../../domain/entities/market_overview.dart'; import '../../providers/user_providers.dart'; import '../../providers/contribution_providers.dart'; +import '../../providers/trading_providers.dart'; import '../../widgets/shimmer_loading.dart'; class ContributionPage extends ConsumerWidget { @@ -28,6 +30,8 @@ class ContributionPage extends ConsumerWidget { // 获取预估收益 final estimatedEarnings = ref.watch(estimatedEarningsProvider(accountSequence)); final statsAsync = ref.watch(contributionStatsProvider); + // 获取市场概览(积分股池余量) + final marketAsync = ref.watch(marketOverviewProvider); // Extract loading state and data from AsyncValue final isLoading = contributionAsync.isLoading; @@ -35,6 +39,8 @@ class ContributionPage extends ConsumerWidget { final hasError = contributionAsync.hasError; final error = contributionAsync.error; final isStatsLoading = statsAsync.isLoading; + final isMarketLoading = marketAsync.isLoading; + final market = marketAsync.valueOrNull; return Scaffold( backgroundColor: const Color(0xFFF5F5F5), @@ -44,6 +50,7 @@ class ContributionPage extends ConsumerWidget { onRefresh: () async { ref.invalidate(contributionProvider(accountSequence)); ref.invalidate(contributionStatsProvider); + ref.invalidate(marketOverviewProvider); }, child: hasError && contribution == null ? Center( @@ -71,7 +78,7 @@ class ContributionPage extends ConsumerWidget { sliver: SliverList( delegate: SliverChildListDelegate([ // 总贡献值卡片 - _buildTotalContributionCard(ref, contribution, isLoading), + _buildTotalContributionCard(ref, contribution, isLoading, market, isMarketLoading), const SizedBox(height: 16), // 三栏统计 _buildThreeColumnStats(ref, contribution, isLoading), @@ -156,7 +163,13 @@ class ContributionPage extends ConsumerWidget { ); } - Widget _buildTotalContributionCard(WidgetRef ref, Contribution? contribution, bool isLoading) { + Widget _buildTotalContributionCard( + WidgetRef ref, + Contribution? contribution, + bool isLoading, + MarketOverview? market, + bool isMarketLoading, + ) { final total = contribution?.totalContribution ?? '0'; final hideAmounts = ref.watch(hideAmountsProvider); return Container( @@ -200,6 +213,25 @@ class ContributionPage extends ConsumerWidget { ), ), const SizedBox(height: 12), + // 积分股池实时余量 + Row( + children: [ + Text( + '积分股池实时余量: ', + style: TextStyle(fontSize: 12, color: _grayText.withOpacity(0.9)), + ), + isMarketLoading + ? const ShimmerText( + placeholder: '----', + style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: _orange), + ) + : Text( + hideAmounts ? '******' : formatAmount(market?.greenPoints ?? '0'), + style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: _orange), + ), + ], + ), + const SizedBox(height: 8), // 有效期标签 Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),