maskPhone method

String maskPhone({
  1. int visibleStart = 2,
  2. int visibleEnd = 4,
  3. String maskChar = '*',
  4. bool keepPlusPrefix = true,
  5. bool maskIfShorter = false,
  6. String? separator,
})

Masks a phone number after stripping non-digit characters.

Use visibleStart and visibleEnd to control how many digits remain visible at the beginning and end. When keepPlusPrefix is true and the input starts with +, the plus sign is preserved in the output.

Example:

'9876543210'.maskPhone(visibleStart: 2, visibleEnd: 4); // 98******3210
'+919876543210'.maskPhone(visibleStart: 3, visibleEnd: 4); // +919*****3210

Implementation

String maskPhone({
  int visibleStart = 2,
  int visibleEnd = 4,
  String maskChar = '*',
  bool keepPlusPrefix = true,
  bool maskIfShorter = false,
  String? separator,
}) {
  if (_isEmptyOrNull) return '';

  final raw = this!.trim();
  final hasPlus = keepPlusPrefix && raw.startsWith('+');
  final digits = raw.replaceAll(RegExp(r'\D'), '');

  if (digits.isEmpty) return '';

  final maskedDigits = digits.mask(
    visibleStart: visibleStart,
    visibleEnd: visibleEnd,
    maskChar: maskChar,
    maskIfShorter: maskIfShorter,
  );

  final result = hasPlus ? '+$maskedDigits' : maskedDigits;

  if (separator == null || separator.isEmpty) return result;

  return _formatWithSeparator(
    value: result,
    separator: separator,
    preservePrefix: hasPlus ? '+' : null,
    groupSize: 2,
  );
}