fix(asset): 总资产估值包含积分值余额
总资产估值 = 积分股价值 + 积分值余额 - 积分股价值 = 积分股 × (1 + burnMultiplier) × 价格 - 积分值余额 = 可用积分值 + 冻结积分值 之前只计算了积分股价值,现在加上了积分值(现金)余额。 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
d4f7cd834a
commit
d9d46065e0
|
|
@ -117,15 +117,25 @@ class _AssetPageState extends ConsumerState<AssetPage> {
|
||||||
_timerStarted = false;
|
_timerStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 计算当前实时资产显示值
|
/// 计算当前实时总资产显示值
|
||||||
/// 使用 WebSocket 推送的实时价格
|
/// 总资产 = 积分股价值 + 积分值余额
|
||||||
/// 资产显示值 = 当前积分股余额 × (1 + burnMultiplier) × price
|
/// 积分股价值 = 当前积分股余额 × (1 + burnMultiplier) × price
|
||||||
double get _currentDisplayValue {
|
/// 积分值余额 = 可用积分值 + 冻结积分值
|
||||||
|
double _calculateTotalAssetValue(AssetDisplay? asset) {
|
||||||
// 优先使用 WebSocket 推送的价格,否则使用 API 返回的价格
|
// 优先使用 WebSocket 推送的价格,否则使用 API 返回的价格
|
||||||
final price = double.tryParse(_currentPrice) ?? 0;
|
final price = double.tryParse(_currentPrice) ?? 0;
|
||||||
final burnMultiplier = double.tryParse(_currentBurnMultiplier) ?? 0;
|
final burnMultiplier = double.tryParse(_currentBurnMultiplier) ?? 0;
|
||||||
final multiplierFactor = 1 + burnMultiplier;
|
final multiplierFactor = 1 + burnMultiplier;
|
||||||
return _currentShareBalance * multiplierFactor * price;
|
|
||||||
|
// 积分股价值
|
||||||
|
final shareValue = _currentShareBalance * multiplierFactor * price;
|
||||||
|
|
||||||
|
// 积分值余额(现金 = 可用 + 冻结)
|
||||||
|
final availableCash = double.tryParse(asset?.availableCash ?? '0') ?? 0;
|
||||||
|
final frozenCash = double.tryParse(asset?.frozenCash ?? '0') ?? 0;
|
||||||
|
final totalCash = availableCash + frozenCash;
|
||||||
|
|
||||||
|
return shareValue + totalCash;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 计算当前实时积分股余额
|
/// 计算当前实时积分股余额
|
||||||
|
|
@ -210,7 +220,7 @@ class _AssetPageState extends ConsumerState<AssetPage> {
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
// 总资产卡片 - 始终显示,数字部分闪烁,实时刷新
|
// 总资产卡片 - 始终显示,数字部分闪烁,实时刷新
|
||||||
_buildTotalAssetCard(asset, isLoading, _currentDisplayValue, _currentShareBalance, perSecondEarning),
|
_buildTotalAssetCard(asset, isLoading, _calculateTotalAssetValue(asset), _currentShareBalance, perSecondEarning),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
// 快捷操作按钮
|
// 快捷操作按钮
|
||||||
_buildQuickActions(context),
|
_buildQuickActions(context),
|
||||||
|
|
@ -255,13 +265,13 @@ class _AssetPageState extends ConsumerState<AssetPage> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildTotalAssetCard(AssetDisplay? asset, bool isLoading, double currentDisplayValue, double currentShareBalance, String perSecondEarning) {
|
Widget _buildTotalAssetCard(AssetDisplay? asset, bool isLoading, double totalAssetValue, double currentShareBalance, String perSecondEarning) {
|
||||||
// 使用传入的每秒增长值(来自 mining-service)
|
// 使用传入的每秒增长值(来自 mining-service)
|
||||||
final growthPerSecond = double.tryParse(perSecondEarning) ?? 0.0;
|
final growthPerSecond = double.tryParse(perSecondEarning) ?? 0.0;
|
||||||
|
|
||||||
// 使用实时计算的资产值(含倍数)
|
// 使用实时计算的总资产值(积分股价值 + 积分值余额)
|
||||||
final displayValue = asset != null && currentDisplayValue > 0
|
final displayValue = asset != null && totalAssetValue > 0
|
||||||
? currentDisplayValue.toString()
|
? totalAssetValue.toString()
|
||||||
: asset?.displayAssetValue;
|
: asset?.displayAssetValue;
|
||||||
|
|
||||||
// 计算有效积分股(含倍数)= 实时积分股余额 × (1 + burnMultiplier)
|
// 计算有效积分股(含倍数)= 实时积分股余额 × (1 + burnMultiplier)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue