我有一个名为 chatId 的函数,在该函数中它的参数是一个字符串电子邮件其中有两个字段,一个是 chatId,另一个是用户 ID 数组,我使用 array contains 方法检查它,然后我通过更改 userid 交替检查索引 1 和 0 的数组,如果找到记录则继续使用应用程序,如果没有则继续在集合中创建一个条目,每次我点击同一个用户,它都会生成新文档
import 'package:chatter/fireabse_config.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:uuid/uuid.dart';
import '../toast_msg.dart';
class chat extends GetxController {
TextEditingController chatController = TextEditingController();
ScrollController scroll = ScrollController();
String msg = '';
String chatID = '';
String? peerUser = '';
RxList chatContact = [].obs;
RxBool chatExists = false.obs;
List messages = [
{'msgcontent': 'hello', 'type': 'sender'},
{'msgcontent': 'hy', 'type': 'receiver'},
{'msgcontent': 'what you doing', 'type': 'sender'},
{'msgcontent': 'nothing', 'type': 'receiver'},
{'msgcontent': 'why?', 'type': 'sender'},
];
@override
void onInit() {
fetchAllUser();
super.onInit();
}
@override
void onClose() {
chatID = '';
peerUser = '';
Get.delete<chat>();
super.onClose();
}
void fetchAllUser() async {
try {
User? user = FirebaseConfig.auth.currentUser;
FirebaseConfig.storage
.collection('user')
.where('uid', isNotEqualTo: user!.uid)
.get()
.then((list) {
for (var result in list.docs) {
print(result.data());
chatContact.add(result.data());
}
});
} catch (FirebaseAuthException) {
msg = FirebaseAuthException.toString();
toast(msg);
}
}
void send(String msg) {
messages.add({'msg content': msg, 'type': 'sender'});
update();
}
void chatId(chatEmail) async {
try {
User? user = FirebaseConfig.auth.currentUser;
await FirebaseConfig.storage
.collection('user')
.where('email', isEqualTo: chatEmail)
.get()
.then((value) async {
for (var curusr in value.docs) {
print(curusr['uid']);
peerUser = curusr['uid'];
}
QuerySnapshot snapshots = await FirebaseConfig.storage
.collection('chat')
.where('users', arrayContains: [user!.uid, peerUser]).get();
for (var snapshot in snapshots.docs) {
if ((snapshot['users'][0] == user.uid &&
snapshot['users'][1] == peerUser) ||
(snapshot['users'][0] == peerUser &&
snapshot['users'][1] == user.uid)) {
chatID = snapshot['chatId'];
break;
} else {
String chatId = Uuid().v4();
DocumentReference docRef =
await FirebaseFirestore.instance.collection("chat").add({
'chatId': chatId,
'users': FieldValue.arrayUnion([user.uid, peerUser]),
});
chatID = docRef.id;
}
}
});
} catch (exception) {
print(exception);
}
update();
}
}