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

Flutter结合Firestore展示指定状态待办任务时渲染报错求助

解决Flutter Firestore StreamBuilder展示已完成任务的渲染错误

你现在的需求是只展示Firestore中todo_list集合里status为true的待办任务,但当前代码抛出了'child != null'的断言错误,我来帮你分析并解决这个问题:

原代码问题分析

你的代码里有两个关键问题:

  1. 遍历文档时,对status为false的任务返回了空的Text("") widget,这会被加入ListView的children列表,触发渲染断言错误
  2. snapshots是一个方法,你没有加调用括号,导致无法正确获取数据流

修正后的代码

return StreamBuilder<QuerySnapshot>(
  // 修正:调用snapshots()方法获取数据流
  stream: Firestore.instance.collection('todo_list').snapshots(),
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if (!snapshot.hasData) {
      return const Text('Loading...');
    }
    // 第一步:先过滤出所有status为true的任务文档
    final completedTasks = snapshot.data.documents
        .where((document) => document['status'] == true)
        .toList();
    
    return ListView(
      // 第二步:只对过滤后的文档生成ListTile
      children: completedTasks.map((DocumentSnapshot document) {
        return ListTile(
          title: Row(
            children: const <Widget>[
              Expanded(
                child: Text(
                  document['task'],
                  style: TextStyle(
                    decoration: TextDecoration.lineThrough,
                  ),
                ),
              ),
            ],
          ),
        );
      }).toList(),
    );
  },
);

修正说明

  • 先过滤再渲染:通过where方法筛选出符合条件的文档,避免生成无用的空widget,从根源上解决child != null的断言错误
  • 正确调用数据流方法:给snapshots加上括号,确保能获取到Firestore的实时更新数据流
  • 代码简化:去掉了冗余的三元判断,逻辑更清晰,也避免了无效widget的生成

内容的提问来源于stack exchange,提问作者Happy Haris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:32:29