login method

Future<void> login(
  1. String username, {
  2. required String firstName,
  3. required String lastName,
})

Implementation

Future<void> login(
  String username, {
  required String firstName,
  required String lastName,
}) async {
  username = "$username@chat.io";
  try {
    final fetchSignInMethodsForEmail =
        await FirebaseAuth.instance.fetchSignInMethodsForEmail(username);
    if (fetchSignInMethodsForEmail.isEmpty) {
      await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: username,
        password: username,
      );
    }
    final authUser = await FirebaseAuth.instance.signInWithEmailAndPassword(
      email: username,
      password: username,
    );
    types.User? user = await getUser(authUser.user!.uid);
    user = types.User(
      id: authUser.user!.uid,
      firstName: firstName,
      lastName: lastName,
      updatedAt: user?.updatedAt ?? DateTime.now().millisecondsSinceEpoch,
      createdAt: user?.createdAt ?? DateTime.now().millisecondsSinceEpoch,
      metadata: {
        ...user?.metadata ?? {},
        "username": username,
      },
    );
    await FirebaseChatCore.instance.createUserInFirestore(user);
    isLogin = true;
    notifyListeners();
  } catch (e) {
    isLogin = false;
    notifyListeners();
    rethrow;
  }
}