Flutter 如何在Flatter中基于int值以列表形式订购Firestore文档

Flutter 如何在Flatter中基于int值以列表形式订购Firestore文档,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我目前有一个文档列表,每个文档都包含一个名为plastics的int值。目前,该列表仅按文档添加到集合时的顺序显示文档,但我希望能够根据每个文档中的int值对文档进行排序。我在网上到处找了找,只找到了大部分关于订购时间戳的教程。关于这件事是否有任何文件或资料来源?以下是我正在处理的代码情况: 首先,在我的应用程序中,用户可以加入群组,当他们加入群组时,他们会带上自己的姓名和int数据,然后这些数据会存储在每个用户的文档中 Future<String> joinGroup(String

我目前有一个文档列表,每个文档都包含一个名为plastics的int值。目前,该列表仅按文档添加到集合时的顺序显示文档,但我希望能够根据每个文档中的int值对文档进行排序。我在网上到处找了找,只找到了大部分关于订购时间戳的教程。关于这件事是否有任何文件或资料来源?以下是我正在处理的代码情况:

首先,在我的应用程序中,用户可以加入群组,当他们加入群组时,他们会带上自己的姓名和int数据,然后这些数据会存储在每个用户的文档中

Future<String> joinGroup(String groupId, String userUid, String displayName,
      String plastics) async {
    String retVal = 'error';
    List<String> members = List();
    try {
      members.add(displayName);
      await _firestore.collection('Groups').doc(groupId).update({
        'members': FieldValue.arrayUnion(members),
      });
      final uid = FirebaseAuth.instance.currentUser.uid;
      await _firestore.collection('UserNames').doc(uid).update({
        'groupId': groupId,
      });

//Below me is the code for doing so

      await _firestore
          .collection("Groups")
          .doc(groupId)
          .collection("Members")
          .doc(userUid)
          .set({'displayName': displayName, 'plastics': plastics});

      retVal = 'success';
    } catch (e) {}
    return retVal;
  }
Future joinGroup(字符串groupId、字符串userUid、字符串displayName、,
串(塑料)异步{
字符串retVal='error';
列表成员=列表();
试一试{
添加(显示名称);
等待_firestore.collection('Groups').doc(groupId).更新({
“成员”:FieldValue.arrayUnion(成员),
});
final uid=FirebaseAuth.instance.currentUser.uid;
等待_firestore.collection('UserNames').doc(uid).update({
“groupId”:groupId,
});
//下面是这样做的代码
等待!
.集合(“组”)
.doc(组ID)
.集合(“成员”)
.doc(userUid)
.set({'displayName':displayName,'plastics':plastics});
retVal=‘成功’;
}捕获(e){}
返回返回;
}
然后,我使用该代码访问文档并将它们放入列表中

@override
  Widget build(BuildContext context) {
    final CollectionReference users = firestore.collection('UserNames');

    final String uid = auth.currentUser.uid;

    return FutureBuilder(
        future: users.doc(uid).get(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            final result = snapshot.data;
            final groupId = result.data()['groupId'];
            return FutureBuilder<QuerySnapshot>(
                // <2> Pass `Future<QuerySnapshot>` to future
                future: FirebaseFirestore.instance
                    .collection('Groups')
                    .doc(groupId)
                    .collection('Members')
                    .get(), 
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    // <3> Retrieve `List<DocumentSnapshot>` from snapshot
                    final List<DocumentSnapshot> documents = snapshot.data.docs;
                    return ListView(
                        children: documents
                            .map((doc) => Card(
                                  child: ListTile(
                                    title: Text(doc['displayName']),
                                    subtitle: Text(doc['plastics'].toString()),
                                  ),
                                ))
                            .toList());
                  } else if (snapshot.hasError) {
                    return Text('Its Error!');
                  }
                });
          }
        });
  }
@覆盖
小部件构建(构建上下文){
final CollectionReference users=firestore.collection(“用户名”);
最终字符串uid=auth.currentUser.uid;
回归未来建设者(
future:users.doc(uid.get(),
生成器:(上下文,快照){
if(snapshot.hasData){
最终结果=snapshot.data;
final groupId=result.data()['groupId'];
回归未来建设者(
//把“未来”传给未来
未来:FirebaseFirestore.instance
.集合(“组”)
.doc(组ID)
.集合(“成员”)
.get(),
生成器:(上下文,快照){
if(snapshot.hasData){
//从快照中检索“列表”
最终列表文档=snapshot.data.docs;
返回列表视图(
儿童:文件
.map((doc)=>卡片(
孩子:ListTile(
标题:文本(doc['displayName']),
字幕:文本(doc['plastics'].toString()),
),
))
.toList());
}else if(snapshot.hasrerror){
返回文本(“其错误!”);
}
});
}
});
}

是否需要特定功能,以便根据塑料的数值列出成员集合中的文档?

您可以使用
orderBy
对结果进行排序

FirebaseFirestore.instance
                    .collection('Groups')
                    .doc(groupId)
                    .collection('Members')
                    .orderBy('plastics', descending: true)
                    .get()

使用此orderBy是否有一种方法可以列出始终显示在顶部的较大int值?@millyafaro您可以使用
降序
参数。我已经用这个例子更新了我的答案。