maskEmail method

String maskEmail({
  1. int visibleStart = 1,
  2. int visibleEnd = 0,
  3. String maskChar = '*',
  4. bool maskDomain = false,
  5. int domainVisibleStart = 0,
  6. int domainVisibleEnd = 0,
  7. bool maskIfShorter = false,
})

Masks the local part of an email address before @.

Use visibleStart and visibleEnd to control the visible characters in the local part. Set maskDomain to true to also mask the domain using domainVisibleStart and domainVisibleEnd.

Example:

'user@example.com'.maskEmail(visibleStart: 1, visibleEnd: 0); // u***@example.com
'john.doe@gmail.com'.maskEmail(visibleStart: 2, visibleEnd: 2); // jo****oe@gmail.com

Implementation

String maskEmail({
  int visibleStart = 1,
  int visibleEnd = 0,
  String maskChar = '*',
  bool maskDomain = false,
  int domainVisibleStart = 0,
  int domainVisibleEnd = 0,
  bool maskIfShorter = false,
}) {
  if (_isEmptyOrNull) return '';

  final email = this!.trim();
  final atIndex = email.indexOf('@');

  if (atIndex <= 0 || atIndex >= email.length - 1) {
    return email.mask(
      visibleStart: visibleStart,
      visibleEnd: visibleEnd,
      maskChar: maskChar,
      maskIfShorter: maskIfShorter,
    );
  }

  final local = email.substring(0, atIndex);
  final domain = email.substring(atIndex + 1);

  final maskedLocal = local.mask(
    visibleStart: visibleStart,
    visibleEnd: visibleEnd,
    maskChar: maskChar,
    maskIfShorter: maskIfShorter,
  );

  final maskedDomain = maskDomain
      ? domain.mask(
          visibleStart: domainVisibleStart,
          visibleEnd: domainVisibleEnd,
          maskChar: maskChar,
          maskIfShorter: maskIfShorter,
        )
      : domain;

  return '$maskedLocal@$maskedDomain';
}