signupUser method

Future<String?> signupUser(
  1. SignupData signupData,
  2. bool rememberMe
)

Registers a new user using the provided signup information.

This function hashes the password, sends the registration request to the server, and saves the user's credentials locally if rememberMe is true.

  • signupData: A SignupData object containing the username and password.
  • rememberMe: A flag indicating if the user's credentials should be saved for future logins.

Returns null on successful registration, or an error message otherwise.

Implementation

Future<String?> signupUser(SignupData signupData, bool rememberMe) async {
  LoadingDialog loadingDialog = LoadingDialog(buildContext: context);
  loadingDialog.showLoadingDialog();

  try {
    // Hash the password before sending to API
    EncryptionUtils encryptionUtils = EncryptionUtils();
    String hashedPassword = encryptionUtils.hashUserPassword(
        userName: signupData.name!,
        passwordToHash: signupData.password!
    );

    // Call the register API
    DataHandler dataHandler = DataHandler();
    ApiReturn registrationReturn = await dataHandler
        .getUserRepo()
        .registerUser(
      hashedPassword: hashedPassword,
      userName: signupData.name!,
    );

    // If registration is successful
    if (registrationReturn.success) {
      await Provider.of<DataProvider>(context, listen: false)
          .userHasLoggedIn(registrationReturn.data);

      // Save user credentials if `rememberMe` is enabled
      if (rememberMe) {
        await SharedPrefUtils().set("lastLoggedInUserName", signupData.name!);
        await SharedPrefUtils().set("lastLoggedInUserPassword", signupData.password!);
      }

      loadingDialog.closeLoadingDialog();
      return null;
    } else {
      loadingDialog.closeLoadingDialog();
      return '${registrationReturn.returnCode}\n${registrationReturn.explanation}';
    }
  } catch (e) {
    loadingDialog.closeLoadingDialog();
    return e.toString();
  }
}