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 33853b9e..a5f38627 100644 --- a/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart +++ b/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart @@ -33,6 +33,7 @@ class _AssetPageState extends ConsumerState { // 实时刷新相关状态 Timer? _refreshTimer; int _elapsedSeconds = 0; + double _initialDisplayValue = 0; double _initialShareBalance = 0; double _growthPerSecond = 0; String? _lastAccountSequence; @@ -53,6 +54,7 @@ class _AssetPageState extends ConsumerState { _refreshTimer?.cancel(); _elapsedSeconds = 0; + _initialDisplayValue = double.tryParse(asset.displayAssetValue) ?? 0; _initialShareBalance = double.tryParse(asset.shareBalance) ?? 0; // 使用传入的每秒增长值(来自 mining-service) _growthPerSecond = double.tryParse(perSecondEarning) ?? 0; @@ -76,10 +78,13 @@ class _AssetPageState extends ConsumerState { } /// 计算当前实时资产显示值 - /// 资产显示值 = 积分股余额 × price(不含倍数,使用实际价格) + /// 资产显示值 = 积分股余额 × (1 + burnMultiplier) × price + /// 每秒资产增长 = 每秒积分股增长 × (1 + burnMultiplier) × price double get _currentDisplayValue { final price = double.tryParse(_lastAsset?.currentPrice ?? '0') ?? 0; - return _currentShareBalance * price; + final burnMultiplier = double.tryParse(_lastAsset?.burnMultiplier ?? '0') ?? 0; + final multiplierFactor = 1 + burnMultiplier; + return _initialDisplayValue + (_elapsedSeconds * _growthPerSecond * multiplierFactor * price); } /// 计算当前实时积分股余额 @@ -207,15 +212,16 @@ class _AssetPageState extends ConsumerState { // 使用传入的每秒增长值(来自 mining-service) final growthPerSecond = double.tryParse(perSecondEarning) ?? 0.0; - // 使用实时计算的资产值(如果有)- 不含倍数 + // 使用实时计算的资产值(含倍数) final displayValue = asset != null && currentDisplayValue > 0 ? currentDisplayValue.toString() - : null; + : asset?.displayAssetValue; - // 使用实时计算的积分股余额(如果有)- 实际数量,不含倍数 - final shareBalance = asset != null && currentShareBalance > 0 - ? currentShareBalance.toString() - : asset?.shareBalance; + // 计算有效积分股(含倍数)= 实时积分股余额 × (1 + burnMultiplier) + final burnMultiplier = double.tryParse(asset?.burnMultiplier ?? '0') ?? 0; + final effectiveShareBalance = asset != null && currentShareBalance > 0 + ? (currentShareBalance * (1 + burnMultiplier)).toString() + : asset?.effectiveShares; return Container( decoration: BoxDecoration( @@ -300,9 +306,9 @@ class _AssetPageState extends ConsumerState { ), ), const SizedBox(height: 4), - // 积分股余额 - 实际数量 + // 有效积分股(含倍数) DataText( - data: shareBalance != null ? '≈ ${formatCompact(shareBalance)} 积分股' : null, + data: effectiveShareBalance != null ? '≈ ${formatCompact(effectiveShareBalance)} 积分股 (含倍数)' : null, isLoading: isLoading, placeholder: '≈ -- 积分股', style: const TextStyle(