getChatMessages function
Implementation
Future<String?> getChatMessages(Function() _redraw, {String app = "customer", }) async {
var _unread = 0;
try{
if (app == "provider"){
customersChat = [];
customersChat.addAll(users);
}
if (app == "customer")
_createChatUsersList();
if (app == "admin"){
customersChat = [];
customersChat.addAll(users);
}
var user = FirebaseAuth.instance.currentUser;
if (user == null)
return "user == null";
//
for (var item in customersChat) {
var data = await FirebaseFirestore.instance.collection("chatRoom").doc(
getChatRoomId(item.id, user.uid)).get();
if (data.data() != null) {
var _data = data.data()!;
item.all = (_data['all'] != null) ? _data['all'] : 0;
item.unread = (_data['unread_${user.uid}'] != null) ? _data['unread_${user.uid}'] : 0;
item.lastMessage = (_data['last_message'] != null) ? _data['last_message'] : "";
item.lastMessageTime = (_data['last_message_time'] != null) ? _data['last_message_time'].toDate().toLocal() : DateTime.now();
_unread += item.unread;
}
if (!userAccountData.blockedUsers.contains(item.id))
item.listen = FirebaseFirestore.instance.collection("chatRoom")
.doc(getChatRoomId(item.id, user.uid)).snapshots().listen((querySnapshot) async {
if (querySnapshot.data() != null) {
var _data = querySnapshot.data()!;
addStat("chat listen", _data.length);
item.all = (_data['all'] != null) ? _data['all'] : 0;
item.unread = (_data['unread_${user.uid}'] != null) ? _data['unread_${user.uid}'] : 0;
item.lastMessage = (_data['last_message'] != null) ? _data['last_message'] : "";
item.lastMessageTime = (_data['last_message_time'] != null) ? _data['last_message_time'].toDate().toLocal() : DateTime.now();
if (chatId == item.id) {
if (item.unread != 0) {
await FirebaseFirestore.instance.collection("chatRoom").doc(getChatRoomId(item.id, user.uid)).set({
"unread_${user.uid}": 0,}, SetOptions(merge: true));
await FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
"unread_chat": FieldValue.increment(-item.unread),
}, SetOptions(merge: true));
}
}
customersChat.sort((a, b) => a.compareToAll(b));
customersChat.sort((a, b) => a.compareToUnread(b));
redrawMainWindow();
}
});
}
customersChat.sort((a, b) => a.compareToAll(b));
customersChat.sort((a, b) => a.compareToUnread(b));
if (_unread != chatCount)
await FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
"unread_chat": _unread,
}, SetOptions(merge: true));
}catch(ex){
return "getChatMessages " + ex.toString();
}
return null;
}