fetchMessages method

Future<List<Message>> fetchMessages(
  1. String chatId, {
  2. Message? lastMessage,
})

Fetches messages for a chat, optionally paginated after lastMessage.

Implementation

Future<List<Message>> fetchMessages(String chatId,
    {Message? lastMessage}) async {
  Query query = _firestore
      .collection('chats')
      .doc(chatId)
      .collection('messages')
      .orderBy('timestamp', descending: true)
      .limit(initialLimit);

  if (lastMessage != null) {
    query = query.startAfter([lastMessage.toMap()['timestamp']]);
  }

  QuerySnapshot querySnapshot = await query.get();

  print("🔥 Fetching messages for chatId: $chatId");
  print("🔥 Last Timestamp: ${lastMessage?.timestamp}");
  print("🔥 Query Retrieved Messages: ${querySnapshot.docs.length}");

  // Print all retrieved message timestamps
  for (var doc in querySnapshot.docs) {
    print(
        "🔥 Message Timestamp: ${(doc.data() as Map<String, dynamic>)['timestamp']}");
  }

  List<Message> messages = querySnapshot.docs
      .map((doc) => Message.fromMap(doc.data() as Map<String, dynamic>))
      .toList();

  return messages;
}