login method

dynamic login({
  1. required BuildContext context,
  2. required bool remember_me,
  3. required GlobalKey<FormState> login_form_key,
  4. required List<TextEditingController> input_controllers,
  5. required SharedPreferences prefs,
  6. required Persistence persistence,
})

Implementation

login({
  required BuildContext context,
  required bool remember_me,
  required GlobalKey<FormState> login_form_key,
  required List<TextEditingController> input_controllers,
  required SharedPreferences prefs,
  required Persistence persistence,
}) async {
  TextEditingController email_input_controller = input_controllers[0];
  TextEditingController password_input_controller = input_controllers[1];

  if (login_form_key.currentState!.validate()) {
    // Set persistence in Web.

    if (UniversalPlatform.isWeb)
      await FirebaseAuth.instance.setPersistence(persistence);

    await FirebaseAuth.instance
        .signInWithEmailAndPassword(
      email: email_input_controller.text,
      password: password_input_controller.text,
    )
        .then((UserCredential value) async {
      User user = value.user!;
      String uid = user.uid;

      DocumentSnapshot snapshot_user =
          await FirebaseFirestore.instance.collection("users").doc(uid).get();

      if (value.user!.emailVerified) {
        if (remember_me) prefs.setString("email", value.user!.email!);
        open_screen("home");
        email_input_controller.clear();
        password_input_controller.clear();
      } else {
        show_email_verification_alert_dialog(
          context: context,
          user: value.user!,
        );
      }
      return null;
    }).catchError((error) {
      print("Login error: " + error.toString());

      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text("The password or email are invalid"),
          duration: Duration(milliseconds: 1500),
        ),
      );
    });
  }
}