Flutter中从Firebase数组获取Title并在StreamBuilder列表显示失败求助
解决方案:获取Firebase数组中的title字段并显示
你的代码直接尝试读取document['title'],但实际title字段存储在每个文档的activities数组内的map对象中,需要先遍历这个数组才能获取每个title。以下是修改后的代码:
StreamBuilder( stream: Firestore.instance .collection(widget.user.uid) .orderBy('date', descending: true) .snapshots(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { if (!snapshot.hasData) { return const Center( child: CircularProgressIndicator(), ); } return ListView( children: snapshot.data.documents.map((document) { // 取出当前文档中的activities数组,为空时返回空列表避免报错 List<dynamic> activities = document['activities'] ?? []; return Center( child: Container( width: MediaQuery.of(context).size.width / 1.2, height: MediaQuery.of(context).size.height / 6, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: activities.map((activity) { // 从每个activity对象中提取title,为空时显示默认文本 String title = activity['title'] ?? '无标题'; return Text("Title: $title"); }).toList(), ), ), ); }).toList(), ); }, )
关键修改说明:
- 新增数组读取逻辑:
List<dynamic> activities = document['activities'] ?? [],确保即使activities字段不存在或为null,也不会抛出异常 - 使用
Column包裹多个Text组件:遍历activities数组,为每个包含title的map生成对应的文本行 - 空值处理:
activity['title'] ?? '无标题'避免因某个activity中没有title字段导致的运行错误
内容的提问来源于stack exchange,提问作者Mat Koffman
相关产品推荐
相关产品推荐

