Flutter集成Firebase时无法正确获取Map中数组长度的问题
问题根因
代码中item.length统计的是单条list文档的顶层字段总数,并非存储清单内容的目标数组的元素个数,因此返回结果不符合预期。从数据库结构可知,存储清单内元素的数组字段名为items。
修复方法
读取目标数组字段的长度即可,补充空安全判断避免空字段触发报错,将原有subtitle部分代码替换为:
subtitle: Text( // 若items字段不存在/为空,默认显示0 (item['items'] as List?)?.length.toString() ?? "0" ),
如果你的数组实际字段名不是items,替换为对应字段名即可。
对应修改后完整代码片段
body: Column( children: [ Container( height: MediaQuery.of(context).size.height /1.4, width: MediaQuery.of(context).size.width, child:StreamBuilder( stream: FirebaseFirestore.instance .collection('Users') .doc(FirebaseAuth.instance.currentUser.uid) .collection('lists') .snapshots(), builder: (context, snapshot){ QuerySnapshot data = snapshot.requireData; return ListView.builder( itemCount: data.size, itemBuilder: (context, index){ Map item = data.docs[index].data(); return InkWell( child: Card( child: ListTile( leading: Icon(Icons.skip_next_rounded), title: Text(item['listName']), subtitle: Text((item['items'] as List?)?.length.toString() ?? "0"), ), ), onTap:(){ Navigator.push( context, MaterialPageRoute(builder: (context) => DetailScreen_CheckList_V3(item['listName'])), ); }, ); } ); } ) ) ] )
内容的提问来源于stack exchange,提问作者Laurent Thomas
相关产品推荐
相关产品推荐

