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

3.1 KiB
Raw Blame History

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更新

AssetProviderloadFundAccount() 方法中添加日志:

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绑定

_FundAccountCardbuild() 方法中添加日志:

@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);
  },
)

测试验证

  1. 重启Flutter应用完全关闭后重新打开
  2. 查看控制台日志
  3. 检查数据流:
    • API调用 → Provider更新 → UI渲染

临时解决方案

如果问题依然存在,直接使用 overview 数据:

// 从overview中获取资金余额
final overview = provider.overview;
Text(
  overview?.fundBalance ?? '0.00',
  ...
)