如何在Flutter中从Firebase集合提取所有文档的Movies字段列表?
解决方法
你可以通过遍历每个分类文档,提取其中的movies数组,将数组元素逐个转换为Movie对象后合并成完整的电影列表,具体实现如下:
步骤拆解
- 遍历查询快照里的每一个分类文档
- 从文档数据中取出
movies字段(这是一个数组结构) - 把数组中的每一项通过
Movie.fromMap方法转换成Movie实例 - 将转换后的电影对象添加到总列表
allMovies中
完整的fetchMovieOnly函数
void fetchMovieOnly() async { List<Movie> allMovies = []; final _db = FirebaseFirestore.instance; final snapshot = await _db.collection("MovieCategories").get(); // 遍历所有分类文档 for (var doc in snapshot.docs) { // 获取当前文档的movies数组,为空时返回空数组避免报错 List<dynamic> moviesData = doc.data()['movies'] ?? []; // 逐个转换为Movie对象并加入总列表 for (var movieMap in moviesData) { allMovies.add(Movie.fromMap(movieMap as Map<String, dynamic>)); } } // 此处可添加对allMovies的后续操作,比如打印结果、更新UI等 print("所有电影: ${allMovies.map((movie) => movie.name).toList()}"); }
补充说明
- 用
?? []做兜底处理,避免部分分类文档缺失movies字段时触发空指针异常 - 要确保Firestore中
movies数组内的对象键名,和Movie.fromMap里使用的Id、Name完全一致(Firestore对键名大小写敏感)
内容的提问来源于stack exchange,提问作者user22362195
相关产品推荐
相关产品推荐

