register static method

Future<SignUpStatus> register({
  1. required User user,
  2. required String name,
  3. required String email,
  4. String? orgName,
  5. bool newsletter = true,
  6. OpenFoodFactsLanguage? language,
  7. OpenFoodFactsCountry? country,
  8. UriProductHelper uriHelper = uriHelperFoodProd,
})

Creates a new user

Possible status.status responses:

Returns Status.status 201 = complete; 400 = wrong inputs + Status.error; 500 = server error;

name may not exceed OpenFoodAPIClient.USER_NAME_MAX_LENGTH

When creating a producer account use orgName (former requested_org) to name the Producer or brand

  User offUser = User(userId: 'username or email', password: 'password');

  SignUpStatus status = await OpenFoodAPIClient.register(
    user: offUser,
    name: 'Namer',
    email: 'email',
  );

  if (status.status == 201) {
    print('Yeah account created');
    OpenFoodAPIConfiguration.globalUser = offUser;
  } else {
    print('Error: ${status.error}');
 }

If the user wants to receive the newsletter, by default it will be in English. If you want to change this behavior, please provide a language and/or a country for a localized content.

Implementation

static Future<SignUpStatus> register({
  required User user,
  required String name,
  required String email,
  String? orgName,
  bool newsletter = true,
  final OpenFoodFactsLanguage? language,
  final OpenFoodFactsCountry? country,
  final UriProductHelper uriHelper = uriHelperFoodProd,
}) async {
  if (user.userId.length > USER_NAME_MAX_LENGTH) {
    throw ArgumentError(
      'A username may not exceed $USER_NAME_MAX_LENGTH characters!',
    );
  }

  Uri registerUri = uriHelper.getUri(
    path: '/cgi/user.pl',
    addUserAgentParameters: false,
  );

  if (language != null || country != null) {
    registerUri = UriHelper.replaceSubdomain(
      registerUri,
      language: language,
      country: country,
    );
  }

  Map<String, String> data = <String, String>{
    'name': name,
    'email': email,
    'userid': user.userId,
    'password': user.password,
    'confirm_password': user.password,
    if (orgName != null) 'pro': 'on',
    'pro_checkbox': '1',
    'requested_org': orgName ?? ' ',
    if (newsletter) 'newsletter': 'on',
    'action': 'process',
    'type': 'add',
    '.submit': 'Register',
  };

  Status status = await HttpHelper().doMultipartRequest(
    registerUri,
    data,
    uriHelper: uriHelper,
  );

  return SignUpStatus(status);
}