如何在flutter中按时间戳对List<Map<String, dynamic>>进行排序?

问题描述 投票:0回答:3

我正在构建一个 List> 类型的数据列表(我从 firebase 文档中获取该列表,所有这些文档都包含以下数据:document fields)。获得所有数据后,我想按createdOn字段(这是一个时间戳)对列表进行排序,但我不确定如何对其进行排序。这是显示我如何构建列表的代码片段:

Future<List<Map<String, dynamic>>>? getData(List<String> subcategory) async {
    List<Map<String, dynamic>> allData = [];
    try {
      String? email = FirebaseAuth.instance.currentUser!.email;
      var categories = Utils.categoriesDropdownItems;
      for (var i = 0; i < subcategory.length; ++i) {
        var doc = await FirebaseFirestore.instance
            .collection(email!)
            .doc(categories[0])
            .collection(subcategory[i])
            .get();
        allData.addAll(doc.docs.map((doc) => doc.data()).toList());
      }
      allData.sort(); //Unsure how to approach sorting by timestamp??
      

我不确定如何提取创建的字段以便对其进行排序。我尝试做类似的事情:

allData.sort((a, b) => a["cretedOn"].compareTo(b["createdOn"]));

但是对于 a["createdOn"] 来说似乎不存在compareTo?

flutter sorting google-cloud-firestore
3个回答
3
投票

解决了。我只需确保时间戳定义如下:

allData.sort(((a, b) {
    Timestamp one = a["createdOn"];
    Timestamp two = b["createdOn"];
    return two.compareTo(one);
  }));

0
投票

您可以像这样使用 orderBy 在 firestore 查询中直接订购它们

.collection(subcategory[i]).orderBy('createdOn', descending: true);

0
投票

您可以使用带有自定义比较函数的排序方法。

    void main() {
  List<Map<String, dynamic>> data = [
    {'timestamp': 1639791020, 'value': 'Item 1'},
    {'timestamp': 1639794320, 'value': 'Item 2'},
    {'timestamp': 1639792120, 'value': 'Item 3'},
    // Add more items as needed
  ];

  // Sorting the list based on the 'timestamp' field in descending order
  data.sort((a, b) => b['timestamp'].compareTo(a['timestamp']));

  // Printing the sorted list
  print(data);
}

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.