generate method

String generate(
  1. String emailOrName, {
  2. List<String> adjectives = const [],
  3. DateTime? date,
  4. bool hasNumbers = true,
  5. int numberSeed = 100,
  6. String prefix = '',
  7. String suffix = '',
  8. bool shortYear = true,
})

Generate username from email or name, date or numbers

Implementation

String generate(String emailOrName,
    {List<String> adjectives = const [],
    DateTime? date,
    bool hasNumbers = true,
    int numberSeed = 100,
    String prefix = '',
    String suffix = '',
    bool shortYear = true}) {
  // Check if emailOrName is email
  if (emailOrName.contains('@')) {
    emailOrName = emailOrName
        .substring(0, emailOrName.indexOf('@'))
        .replaceAll(RegExp(r'[^a-zA-Z\d]'), '');
  }

  emailOrName = emailOrName
      .trim()
      .replaceAll(RegExp(r'[^a-zA-Z\d\s]'), ' ')
      .replaceAll(RegExp(r'\s{2,}'), ' ')
      .replaceAll(' ', separator);

  // generate date string
  var dateString = '';
  if (date != null) {
    if (shortYear) {
      dateString = date.year.toString().substring(2, 4);
    } else {
      dateString = date.year.toString();
    }
  }

  var adjective = '';
  if (adjectives.isNotEmpty) {
    adjective = _getRandomElement(adjectives);
  }

  var numberString = '';
  if (dateString == '' && hasNumbers) {
    numberString = _random.nextInt(numberSeed).toString();
  }

  return [prefix, adjective, emailOrName, dateString, numberString, suffix]
      .where((element) => element.isNotEmpty)
      .join(separator)
      .toLowerCase();
}