如何反转ListView Flutter的顺序



需要帮助。我使用Firestore对列表进行排序,但当我添加数据时,它总是在ListView.separated的底部创建的。如何使新数据不显示在底部,而是显示在顶部?据我所知,您需要使用reverse命令,但您可以准确地指示位置和方式。

firestore_repo

Query<Map<String, dynamic>> getMainCollection() {
FirebaseFirestore firestore = FirebaseFirestore.instance;
return firestore.collection('notes').orderBy('date');
}

list_note

child: ListView.separated(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(16),
separatorBuilder: (context, index) => Container(height: 5),
itemCount: widget.snapshot.data!.docs.length,
itemBuilder: (context, index) {
QueryDocumentSnapshot<Object?> documentSnapshot =
widget.snapshot.data!.docs[index];
return Dismissible(
key: Key(documentSnapshot.id),
direction: DismissDirection.endToStart,

试试这个:

final reveredList = widget.snapshot.data!.docs.reversed.toList();

然后在ListView中使用,如下所示:

child: ListView.separated(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(16),
separatorBuilder: (context, index) => Container(height: 5),
itemCount: reveredList.length,
itemBuilder: (context, index) {
QueryDocumentSnapshot<Object?> documentSnapshot =
reveredList[index];
return Dismissible(
key: Key(documentSnapshot.id),
direction: DismissDirection.endToStart,

将此行添加到ListView.separated:

reverse: true, 

所以代码是:

child: ListView.separated(
reverse: true, 
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(16),
separatorBuilder: (context, index) => Container(height: 5),
itemCount: widget.snapshot.data!.docs.length,
itemBuilder: (context, index) {
QueryDocumentSnapshot<Object?> documentSnapshot =
widget.snapshot.data!.docs[index];
return Dismissible(
key: Key(documentSnapshot.id),
direction: DismissDirection.endToStart,

除了如其他人所示反转UI/ListView内部的数据外,您还可以告诉Firestore以相反的顺序返回数据。为此,请将orderBy调用更改为:

return firestore.collection('notes').orderBy('date', descending: true);

最新更新