仅当集合1中的数据与集合2中的数据匹配时填充

时间:2019-06-13 12:41:51

标签: firebase flutter google-cloud-firestore

我有2个收藏夹。 这样设置第一个收藏集。

firestore: SeriesCollection
{
seriesName: "Test Name"
seriesStartDate: 
seriesImage:
}

第二收藏

firestore: SeriesAudioFiles
{
series: "Test Name"
audioFiles: 
speaker:
dateOfEvent:
}

这是我的代码

ExpandableContainer(
              expanded: expandFlag,
              child: ListView.builder(
                itemCount: snapshots.length,
                itemBuilder: (context, index) {
                  if (snapshots[index].data["series"] ==
                      snapshot[widget.index].data["seriesName"]) {
                    return ListTile(
                      leading: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Text(
                            snapshots[index].data["month"],
                            style: TextStyle(
                                color: Colors.black.withOpacity(.5),
                                fontSize: 15),
                          ),
                          Text(
                            snapshots[index].data["day"],
                            style: TextStyle(
                                color: Colors.black.withOpacity(0.5),
                                fontSize: 30),
                          ),
                        ],
                      ),
                      title: Text(snapshots[index].data["sermonTitle"]),
                      subtitle:
                          Text(snapshots[index].data["sermonReference"]),
                      trailing: Icon(Icons.arrow_forward_ios),
                      onTap: () => passData(snapshots[index]),
                    );
                  }
                },
              ),)

我要尝试的是仅列出SeriesAudioFiles,只要它与两个集合中的系列名称都匹配。

我的Firestore数据可能设置有误,但是我对此很陌生。

我曾经尝试过IF contains,但是我似乎无法用它来填充我实际需要的数据。

当我能够获取实际起作用的数据时,它带有一个循环,可多次拉入项目。

1 个答案:

答案 0 :(得分:1)

您可以轻松使用集合的.where()方法。
有了它,您可以建立一个仅包含所需音频的列表:

audioListFromSerie = audioCollection.where((i) => i.series == serieList[iterationIndex].seriesName).toList();