主要修改: 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 - 强制刷新确保数据最新
3.1 KiB
3.1 KiB
Flutter资金账户显示0.00问题诊断
问题现象
- API返回正确数据:
{"fund": {"balance": 15500.0}} - Flutter前端显示:
0.00
诊断步骤
1. 检查数据加载
在 asset_page.dart 的 _loadData() 方法中添加日志:
void _loadData() {
print('[AssetPage] 开始加载数据...');
context.read<AssetProvider>().refreshAll();
}
2. 检查Provider更新
在 AssetProvider 的 loadFundAccount() 方法中添加日志:
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() 方法中添加日志:
@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:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
// 强制刷新,不使用缓存
context.read<AssetProvider>().refreshAll(force: true);
});
}
方案2: 添加空数据处理
修改 _FundAccountCard:
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组件:
Consumer<AssetProvider>(
builder: (context, provider, _) {
return _FundAccountCard(provider: provider);
},
)
测试验证
- 重启Flutter应用(完全关闭后重新打开)
- 查看控制台日志
- 检查数据流:
- API调用 → Provider更新 → UI渲染
临时解决方案
如果问题依然存在,直接使用 overview 数据:
// 从overview中获取资金余额
final overview = provider.overview;
Text(
overview?.fundBalance ?? '0.00',
...
)