parse method Null safety

List<int> parse(
  1. String uuid,
  2. {List<int>? buffer,
  3. int offset = 0,
  4. bool validate = true,
  5. ValidationMode validationMode = ValidationMode.strictRFC4122}
)

Parses the provided uuid into a list of byte values as a List. Can optionally be provided a buffer to write into and a positional offset for where to start inputting into the buffer. Throws FormatException if the UUID is invalid. Optionally you can set validate to false to disable validation of the UUID before parsing.

Implementation

static List<int> parse(
  String uuid, {
  List<int>? buffer,
  int offset = 0,
  bool validate = true,
  ValidationMode validationMode = ValidationMode.strictRFC4122,
}) {
  if (validate) {
    isValidOrThrow(fromString: uuid, validationMode: validationMode);
  }
  var i = offset, ii = 0;

  // Create a 16 item buffer if one hasn't been provided.
  buffer = (buffer != null) ? buffer : Uint8List(16);

  // Convert to lowercase and replace all hex with bytes then
  // string.replaceAll() does a lot of work that I don't need, and a manual
  // regex gives me more control.
  final regex = RegExp('[0-9a-f]{2}');
  for (Match match in regex.allMatches(uuid.toLowerCase())) {
    if (ii < 16) {
      var hex = uuid.toLowerCase().substring(match.start, match.end);
      buffer[i + ii++] = int.parse(hex, radix: 16);
    }
  }

  // Zero out any left over bytes if the string was too short.
  while (ii < 16) {
    buffer[i + ii++] = 0;
  }

  return buffer;
}