addchat method

dynamic addchat(
  1. String uid1,
  2. String firstusername,
  3. String uid2,
  4. String secondusername,
  5. Map<String, dynamic> chatmessage,
)

Implementation

addchat(String uid1, String firstusername, String uid2, String secondusername,
    Map<String, dynamic> chatmessage) async {
  DocumentReference user1 = await usercoll.doc(uid1);
  DocumentReference user2 = await usercoll.doc(uid2);
  DocumentSnapshot snap1 = await user1.get();
  DocumentSnapshot snap2 = await user2.get();
  DocumentReference chat1 = await chats.doc(uid1);
  DocumentReference chat2 = await chats.doc(uid2);
  DocumentSnapshot user1Snapshot = await chat1.get();
  DocumentSnapshot user2Snapshot = await chat2.get();
  String chatid = "";
  if (uid1.codeUnitAt(0) < uid2.codeUnitAt(0)) {
    chatid = "${uid1}_$uid2";
  } else {
    chatid = "${uid2}_$uid1";
  }
  List<dynamic> user1chatswith = await snap1.get('chatswith');
  List<dynamic> user2chatswith = await snap2.get('chatswith');
  if (!user1chatswith.contains(uid2)) {
    // user1chatswith.remove("${uid1}_$uid2");
    user1.update({
      "chatswith": FieldValue.arrayUnion([uid2 + "_" + secondusername]),
    });
    user2.update({
      "chatswith": FieldValue.arrayUnion([uid1 + "_" + firstusername]),
    });

    chats.doc(chatid).set({
      "user1": uid1,
      "user2": uid2,
      chatid: chatid,
    });

    chats.doc(chatid).collection("messages").add(chatmessage);
    chats.doc(chatid).update({
      "recentmessages": chatmessage['message'],
      "recentsender": chatmessage['sender'],
      "time": chatmessage['time'].toString(),
    });
  } else {
    chats.doc(chatid).collection("messages").add(chatmessage);
    chats.doc(chatid).update({
      "recentmessages": chatmessage['message'],
      "recentsender": chatmessage['sender'],
      "time": chatmessage['time'].toString(),
    });
  }
}