addMessage function

Future<String?> addMessage(
  1. String text,
  2. String stringChatMessage
)

Implementation

Future<String?> addMessage(String text,
    String stringChatMessage, /// strings.get(103)  /// "Chat message"
    ) async{
  User? user = FirebaseAuth.instance.currentUser;
  if (user == null)
    return "User == null";

  try{

    await FirebaseFirestore.instance.collection("chatRoom")
        .doc(chatRoomId)
        .collection("chats")
        .add({
          "sendBy": user.uid,
          'read': false,
          "message": text,
          'time': FieldValue.serverTimestamp(),
        });

    await FirebaseFirestore.instance.collection("chatRoom").doc(chatRoomId).set({
      "all": FieldValue.increment(1),
      "unread_$chatId": FieldValue.increment(1),
      "last_message": text,
      "last_message_time": FieldValue.serverTimestamp(),
      "last_message_from": user.uid,
    }, SetOptions(merge: true));

    var querySnapshot = await FirebaseFirestore.instance.collection("listusers").doc(chatId).get();
    if (querySnapshot.exists){
      var data = querySnapshot.data();
      if (data != null){
        if (data["blockedUsers"] != null){
          List<String> _blockedUsers = [];
          for (dynamic key in data['blockedUsers']){
            _blockedUsers.add(key.toString());
          }
          if (!_blockedUsers.contains(user.uid)){
            await FirebaseFirestore.instance.collection("listusers").doc(chatId).set({
              "unread_chat": FieldValue.increment(1),
            }, SetOptions(merge: true));
            sendMessage(text, stringChatMessage, chatId, false, appSettings.cloudKey); /// "Chat message"
          }
        }
      }
    }
  }catch(ex){
    return "model addMessage " + ex.toString();
  }
  return null;
}