Flutter结合Firestore展示指定状态待办任务时渲染报错求助
解决Flutter Firestore StreamBuilder展示已完成任务的渲染错误
你现在的需求是只展示Firestore中todo_list集合里status为true的待办任务,但当前代码抛出了'child != null'的断言错误,我来帮你分析并解决这个问题:
原代码问题分析
你的代码里有两个关键问题:
- 遍历文档时,对
status为false的任务返回了空的Text("")widget,这会被加入ListView的children列表,触发渲染断言错误 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
相关产品推荐
相关产品推荐

