obscureText method

  1. @useResult
String? obscureText({
  1. String char = '•',
  2. int obscureLength = 3,
})

Returns an obscured version of this string using char repeated, or null if empty.

The output length varies by ±obscureLength characters using a time-based jitter to prevent guessing the original string length.

Example:

'password'.obscureText(); // '••••••••••' (length varies)
'secret'.obscureText(char: '*'); // '******' (length varies)
''.obscureText(); // null

Implementation

@useResult
String? obscureText({String char = '•', int obscureLength = 3}) {
  if (isEmpty) {
    return null;
  }

  final int seed = DateTime.now().microsecondsSinceEpoch;
  final int extraLength = (seed % (2 * obscureLength + 1)) - obscureLength;
  final int finalLength = length + extraLength;

  return char * (finalLength > 0 ? finalLength : 1);
}