parse method Null safety

List<int> parse (
  1. String uuid,
  2. {List<int>? buffer,
  3. int offset = 0}
)

Parses the provided uuid into a list of byte values. 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.

Implementation

static List<int> parse(String uuid, {List<int>? buffer, int offset = 0}) {
  if (!isValidUUID(uuid)) {
    throw FormatException('The provided UUID is invalid.', uuid);
  }
  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;
}