feat(mining-app): add share pool balance display on contribution page
Display real-time share pool balance (积分股池实时余量) in the total contribution card on the contribution page. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
19428a8cb7
commit
d12bbb17be
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Reference in New Issue