主要修改: 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 - 强制刷新确保数据最新
137 lines
3.1 KiB
Markdown
137 lines
3.1 KiB
Markdown
# 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',
|
||
...
|
||
)
|
||
```
|