register method

dynamic register({
  1. required BuildContext context,
  2. required bool accept_terms,
  3. required GlobalKey<FormState> register_form_key,
  4. required List<TextEditingController> input_controllers,
  5. required DateTime selected_date,
  6. required int gender_value,
  7. required String country_value,
  8. required String birthday_label,
})

Implementation

register({
  required BuildContext context,
  required bool accept_terms,
  required GlobalKey<FormState> register_form_key,
  required List<TextEditingController> input_controllers,
  required DateTime selected_date,
  required int gender_value,
  required String country_value,
  required String birthday_label,
}) {
  TextEditingController firstname_input_controller = input_controllers[0];
  TextEditingController lastname_input_controller = input_controllers[1];
  TextEditingController email_input_controller = input_controllers[2];
  TextEditingController confirm_email_input_controller = input_controllers[3];
  TextEditingController password_input_controller = input_controllers[4];
  TextEditingController confirm_password_input_controller =
      input_controllers[5];

  if (accept_terms) {
    if (birthday_label != "") {
      if (register_form_key.currentState!.validate()) {
        if (email_input_controller.text ==
            confirm_email_input_controller.text) {
          if (password_input_controller.text ==
              confirm_password_input_controller.text) {
            FirebaseAuth.instance
                .createUserWithEmailAndPassword(
              email: email_input_controller.text,
              password: password_input_controller.text,
            )
                .then((current_user) async {
              FirebaseAuth.instance.signInWithEmailAndPassword(
                email: email_input_controller.text,
                password: password_input_controller.text,
              );

              Timestamp birthday_timestamp =
                  Timestamp.fromDate(selected_date);

              FirebaseFirestore.instance
                  .collection("users")
                  .doc(current_user.user!.uid)
                  .set({
                "firstname": firstname_input_controller.text,
                "lastname": lastname_input_controller.text,
                "birthday": birthday_timestamp,
                "gender": gender_value,
                "country": country_value,
              }).then((result) {
                firstname_input_controller.clear();
                lastname_input_controller.clear();
                email_input_controller.clear();
                confirm_email_input_controller.clear();
                password_input_controller.clear();
                confirm_password_input_controller.clear();

                open_screen("login");
              }).catchError((err) {
                print(err);
              });

              try {
                await current_user.user!.sendEmailVerification();
                return current_user.user!.uid;
              } catch (e) {
                print(
                    "An error occured while trying to send email verification");
                print(e);
              }
              return current_user;
            }).onError((error, stackTrace) {
              if (error.toString().contains("email") &&
                  error.toString().contains("already") &&
                  error.toString().contains("use")) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text("The email address is already registered."),
                    duration: Duration(seconds: 2),
                  ),
                );
              }

              return error.toString();
            });
          } else {
            show_custom_dialog(
              context: context,
              title: "Failed",
              message: "The passwords do not match",
              button_text: "Close",
            );
          }
        } else {
          show_custom_dialog(
            context: context,
            title: "Failed",
            message: "The emails do not match",
            button_text: "Close",
          );
        }
      }
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text("Enter your date of birth"),
          duration: Duration(seconds: 3),
        ),
      );
    }
  } else {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text("You need to accept the terms of use & privacy policy"),
        duration: Duration(seconds: 3),
      ),
    );
  }
}