Home > Net >  How to sort List<Map<String, dynamic>> by timestamp in flutter?
How to sort List<Map<String, dynamic>> by timestamp in flutter?

Time:01-03

I am building a list of data of type List<Map<String, dynamic>> (which I am getting from firebase documents all of which have the following data: document fields). Once I get all the data I would like to sort the list by the createdOn field (which is a timestamp) but I'm unsure as to how to sort it. Here's a snippet of code showing how I build the list:

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??
      

I'm unsure how to extract the created on field to be able to sort it. I tried doing something like:

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

but it seems like compareTo does not exist for a["createdOn"]?

CodePudding user response:

Solved. I just had to make sure the timestamps were defined as follows:

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

CodePudding user response:

You can order them directly in your firestore query using orderBy like this

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