You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter页面加载时ListView为空,输入筛选关键词后才显示数据求助

问题分析与解决方案

核心问题原因

页面初始化时_filteredHealthfacilities始终为空,因为:

  • 初始状态下_filteredHealthfacilities被定义为空列表
  • 调用_fetchHealthFacilities获取数据后,仅更新了_allealthfacilities,但未同步更新_filteredHealthfacilities
  • 只有当TextField内容变化触发_runFilter时,_filteredHealthfacilities才会被赋值

修复步骤

1. 数据获取后同步更新筛选列表

在_fetchHealthFacilities方法的setState块中,添加对_filteredHealthfacilities的赋值,确保初始加载时就填充全部数据:

Future<void> _fetchHealthFacilities() async {
  setState(() {
    isLoading = true; // 新增:开始加载时标记状态
  });
  final db = await DatabaseHelper.instance.database;
  EasyLoading.show(status: 'Loading...');
  final List<Map<String, dynamic>> results = await db.rawQuery(
      "SELECT * FROM ${DatabaseHelper.dbTableHealthfacilities} ORDER BY officename ASC");
  print(results);
  setState(() {
    _allealthfacilities =
        results.map((map) => Healthfacilities.fromJson(map)).toList();
    _filteredHealthfacilities = _allealthfacilities; // 新增:同步筛选列表
    isLoading = false; // 新增:加载完成后标记状态
  });
  EasyLoading.dismiss();
}

2. 完善加载状态控制

原代码中isLoading变量未被正确更新,导致加载指示器无法正常显示。上述代码中已添加isLoading的状态切换,确保数据加载过程中显示进度提示。

完整修正后的关键代码片段

class _HealthFacilitiesListScreenState extends State<HealthFacilitiesListScreen> {
  bool isLoading = false;
  List<Healthfacilities> _allealthfacilities = [];
  List<Healthfacilities> _filteredHealthfacilities = [];

  Future<void> _fetchHealthFacilities() async {
    setState(() {
      isLoading = true;
    });
    final db = await DatabaseHelper.instance.database;
    EasyLoading.show(status: 'Loading...');
    final List<Map<String, dynamic>> results = await db.rawQuery(
        "SELECT * FROM ${DatabaseHelper.dbTableHealthfacilities} ORDER BY officename ASC");
    print(results);
    setState(() {
      _allealthfacilities =
          results.map((map) => Healthfacilities.fromJson(map)).toList();
      _filteredHealthfacilities = _allealthfacilities;
      isLoading = false;
    });
    EasyLoading.dismiss();
  }

  // ... 其余代码保持不变
}

额外说明

  • 无需在initState中手动赋值_filteredHealthfacilities,因为数据获取是异步操作,此时_allealthfacilities仍为空
  • _runFilter方法逻辑正确,输入空值时会自动重置为全部数据,无需修改

内容的提问来源于stack exchange,提问作者Aamir Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:35:08