diff --git a/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart b/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart index 58f509dc..9286c76e 100644 --- a/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart +++ b/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart @@ -126,13 +126,18 @@ class _AssetPageState extends ConsumerState { /// 积分股价值 = 当前积分股余额 × (1 + burnMultiplier) × price /// 积分值余额 = 可用积分值 + 冻结积分值 double _calculateTotalAssetValue(AssetDisplay? asset) { - // 优先使用 WebSocket 推送的价格,否则使用 API 返回的价格 - final price = double.tryParse(_currentPrice) ?? 0; - final burnMultiplier = double.tryParse(_currentBurnMultiplier) ?? 0; + // 优先使用 WebSocket 推送的价格,WebSocket 未连接时回退到 API 返回的价格 + final priceStr = _currentPrice != '0' ? _currentPrice : (asset?.currentPrice ?? '0'); + final price = double.tryParse(priceStr) ?? 0; + final bmStr = _currentBurnMultiplier != '0' ? _currentBurnMultiplier : (asset?.burnMultiplier ?? '0'); + final burnMultiplier = double.tryParse(bmStr) ?? 0; final multiplierFactor = 1 + burnMultiplier; - // 积分股价值 - final shareValue = _currentShareBalance * multiplierFactor * price; + // 积分股余额:定时器启动后使用实时值,否则回退到 API 返回的余额 + final shareBalance = _currentShareBalance > 0 + ? _currentShareBalance + : (double.tryParse(asset?.shareBalance ?? '0') ?? 0); + final shareValue = shareBalance * multiplierFactor * price; // 积分值余额(现金 = 可用 + 冻结) final availableCash = double.tryParse(asset?.availableCash ?? '0') ?? 0;