Files
monisuo/flutter_monisuo/check_flutter_data.md
sion f0af05e366 fix: 修复资金账户余额显示0.00的问题
主要修改:
1. asset_page.dart - _FundAccountCard组件
   - 添加fallback逻辑:优先使用fund.balance,如果为null则使用overview.fundBalance
   - 确保即使fund数据未加载也能显示余额

2. asset_page.dart - initState方法
   - 强制刷新数据(force: true),不使用缓存
   - 确保每次进入页面都加载最新数据

3. 添加账户体系设计文档
   - ACCOUNT_SYSTEM_DESIGN.md - 完整的账户体系设计
   - check_flutter_data.md - 问题诊断步骤

修复后效果:
-  资金账户余额正确显示 (15500 USDT)
-  数据加载更可靠
-  页面刷新时强制更新数据

问题原因:
- fund数据可能未加载或为null
- 添加fallback到overview.fundBalance
- 强制刷新确保数据最新
2026-03-24 16:58:31 +08:00

137 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Flutter资金账户显示0.00问题诊断
## 问题现象
- API返回正确数据: `{"fund": {"balance": 15500.0}}`
- Flutter前端显示: `0.00`
## 诊断步骤
### 1. 检查数据加载
`asset_page.dart``_loadData()` 方法中添加日志:
```dart
void _loadData() {
print('[AssetPage] 开始加载数据...');
context.read<AssetProvider>().refreshAll();
}
```
### 2. 检查Provider更新
`AssetProvider``loadFundAccount()` 方法中添加日志:
```dart
Future<void> loadFundAccount({bool force = false}) async {
print('[AssetProvider] loadFundAccount called, force=$force');
if (_fundAccountLoaded && !force && _fundAccount != null) {
print('[AssetProvider] 使用缓存数据: balance=${_fundAccount!.balance}');
return;
}
try {
final response = await _assetService.getFundAccount();
print('[AssetProvider] API返回: success=${response.success}');
if (response.success) {
_fundAccount = response.data;
print('[AssetProvider] 资金账户数据: balance=${_fundAccount?.balance}');
_fundAccountLoaded = true;
notifyListeners();
}
} catch (e) {
print('[AssetProvider] 加载失败: $e');
}
}
```
### 3. 检查UI绑定
`_FundAccountCard``build()` 方法中添加日志:
```dart
@override
Widget build(BuildContext context) {
final fund = provider.fundAccount;
print('[FundAccountCard] fund=$fund, balance=${fund?.balance}');
return GlassPanel(
child: Text(
fund?.balance ?? '0.00',
style: ...
),
);
}
```
## 可能的原因
### 原因1: 数据未加载
**症状**: `fund` 为 null
**解决**: 确保调用了 `refreshAll()`
### 原因2: Provider未更新
**症状**: 数据加载了但UI未更新
**解决**: 检查 `notifyListeners()` 是否被调用
### 原因3: 数据解析错误
**症状**: 数据加载了但字段为null
**解决**: 检查 `AccountFund.fromJson()` 的解析逻辑
## 快速修复
### 方案1: 强制刷新
修改 `asset_page.dart`:
```dart
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
// 强制刷新,不使用缓存
context.read<AssetProvider>().refreshAll(force: true);
});
}
```
### 方案2: 添加空数据处理
修改 `_FundAccountCard`:
```dart
Text(
fund?.balance ?? '0.00',
style: GoogleFonts.spaceGrotesk(
fontSize: 28,
fontWeight: FontWeight.bold,
color: colorScheme.onSurface,
),
),
if (fund == null)
Text(
'数据加载中...',
style: TextStyle(fontSize: 12, color: colorScheme.onSurfaceVariant),
),
```
### 方案3: 检查数据绑定
确保 `Consumer<AssetProvider>` 正确包裹了UI组件:
```dart
Consumer<AssetProvider>(
builder: (context, provider, _) {
return _FundAccountCard(provider: provider);
},
)
```
## 测试验证
1. 重启Flutter应用完全关闭后重新打开
2. 查看控制台日志
3. 检查数据流:
- API调用 → Provider更新 → UI渲染
## 临时解决方案
如果问题依然存在,直接使用 overview 数据:
```dart
// 从overview中获取资金余额
final overview = provider.overview;
Text(
overview?.fundBalance ?? '0.00',
...
)
```