如何在Flutter中显示ListView中同一日期的照片

dxxyhpgq  于 2023-03-04  发布在  Flutter
关注(0)|答案(2)|浏览(135)

正如你可以看到在Firestore有一个集合称为照片和所有的照片有一个属性称为DateCreated,我们怎么能只显示在listView相同日期的照片?
另外,我不想在查询中硬编码日期:比如collection('photos).where('').isequalto('date')

class SweetList extends StatefulWidget {
  const SweetList({
    super.key,
  });

  @override
  State<SweetList> createState() => _SweetListState();
}

class _SweetListState extends State<SweetList> {
  String transparentEmoji = 'assets/images/poo2.png';
  final Stream<QuerySnapshot> _photoStream = FirebaseFirestore.instance
      .collection('photos')
      .orderBy('dateCreated')
      .snapshots();

  @override
  Widget build(BuildContext context) {
    final width = MediaQuery.of(context).size.width;
    return StreamBuilder<QuerySnapshot?>(
        stream: _photoStream,
        builder: (context, snapshot) {
          return Container(
            color: Colors.black,
            child: ListView.builder(
              itemCount: snapshot.data!.docs.length,
              itemBuilder: ((context, index) {
                final data =
                    snapshot.data?.docs[index].data()! as Map<String, dynamic>;
                return Padding(
                  padding:
                      const EdgeInsets.symmetric(horizontal: 30, vertical: 20),
                  child: GestureDetector(
                    onTap: () {
                      dialog(context);
                    },
                    child: Container(
                      height: 400,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(20),
                        color: Colors.white,
                        image: DecorationImage(
                            image: NetworkImage('${data['imgUrl']}'),
                            fit: BoxFit.fill),
                      ),
                    ),
                  ),
                );
              }),
            ),
          );
        });
  }

我们如何在listView中显示同一日期的照片?

x6492ojm

x6492ojm1#

我不太了解您的使用情形,但这可能有助于满足您的需求
1.使用分组列表-https://pub.dev/packages/grouped_list

  • 查询所有内容
  • 使用按日期分组的列表将它们分组在列表中,例如,您可以看到屏幕截图

1.创建用户必须选择要筛选的日期的流-然后按用户选择的日期查询。它不是硬编码日期,而是将动态日期传递给查询
1.默认情况下,将查询更改为分组,但不要一次查询所有影像,而是为其提供一个日期范围

z2acfund

z2acfund2#

有趣的问题!我认为把这个问题分解成以下几个部分是有意义的:

**1.找出所有唯一日期。**我不确定您是否可以直接从Firestore查询中获得这些数据,因此我认为您可以先获得所有文档,然后创建一个唯一日期列表。
2.将物料排序到唯一的日期时段中。
**3.显示每个桶中的照片。**现在你有一个唯一日期的列表,然后你可以选择你想要的唯一日期,并排序该日期的照片主列表(或由唯一日期组成的列表,每个唯一日期都有照片列表)

void main() {
photos.forEach((p) {

listOfDates.add(p.date);
});

uniquelistOfDates = listOfDates.toSet().toList();

print(uniquelistOfDates);
  
  
for (var d in uniquelistOfDates) {
  
  List<Photo> photosOnDate = [];
  
  for (var p in photos) {
    if (p.date == d) {
      photosOnDate.add(p);
    }
    
  }
    
    map[d] = photosOnDate;
  
}
  
  print(map);
 
  
}

Map map = Map<num, List<Photo>>();

List<num> listOfDates = [];
List<num> uniquelistOfDates = [];

class Photo{
String uid, imgURL;
num date;

Photo({ 
   required this.uid,
   required this.imgURL,
   required this.date
   });
}

List<Photo> photos = [

Photo(date: 160000, uid: "aaa", imgURL: "url1"),
Photo(date: 160000, uid: "bbb", imgURL: "url2"),
Photo(date: 170000, uid: "ccc", imgURL: "url3"),
Photo(date: 170000, uid: "ddd", imgURL: "url4"),
Photo(date: 180000, uid: "eee", imgURL: "url3"),
Photo(date: 180000, uid: "fff", imgURL: "url4"),

];

相关问题