我有一个名为 chatId 的函数,它在该函数中有一个字符串电子邮件参数,我首先获取远程用户的用户 ID

问题描述 投票:0回答:0

我有一个名为 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();
  }
}

flutter firebase dart google-cloud-firestore chat
© www.soinside.com 2019 - 2024. All rights reserved.