decode method Null safety

Uint8List decode(
  1. String base32
)

Takes in a base32 string and decodes it back to a Uint8List that can be converted to a hex string using hexEncode

Implementation

static Uint8List decode(String base32) {
  base32 = base32.toUpperCase();
  if (base32.isEmpty) {
    return Uint8List(0);
  }
  if (!_isValid(base32)) {
    throw FormatException('Invalid Base32 characters');
    //return Uint8List(8);
  }

  var length = base32.indexOf('=');
  if (length == -1) {
    length = base32.length;
  }

  var i = 0;
  var count = length >> 3 << 3;
  var bytes = <int>[];
  while (i < count) {
    var v1 = _base32Decode[base32[i++]] ?? 0;
    var v2 = _base32Decode[base32[i++]] ?? 0;
    var v3 = _base32Decode[base32[i++]] ?? 0;
    var v4 = _base32Decode[base32[i++]] ?? 0;
    var v5 = _base32Decode[base32[i++]] ?? 0;
    var v6 = _base32Decode[base32[i++]] ?? 0;
    var v7 = _base32Decode[base32[i++]] ?? 0;
    var v8 = _base32Decode[base32[i++]] ?? 0;
    bytes.add((v1 << 3 | v2 >> 2) & 255);
    bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
    bytes.add((v4 << 4 | v5 >> 1) & 255);
    bytes.add((v5 << 7 | v6 << 2 | v7 >> 3) & 255);
    bytes.add((v7 << 5 | v8) & 255);
  }

  var remain = length - count;
  if (remain == 2) {
    var v1 = _base32Decode[base32[i++]] ?? 0;
    var v2 = _base32Decode[base32[i++]] ?? 0;
    bytes.add((v1 << 3 | v2 >> 2) & 255);
  } else if (remain == 4) {
    var v1 = _base32Decode[base32[i++]] ?? 0;
    var v2 = _base32Decode[base32[i++]] ?? 0;
    var v3 = _base32Decode[base32[i++]] ?? 0;
    var v4 = _base32Decode[base32[i++]] ?? 0;
    bytes.add((v1 << 3 | v2 >> 2) & 255);
    bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
  } else if (remain == 5) {
    var v1 = _base32Decode[base32[i++]] ?? 0;
    var v2 = _base32Decode[base32[i++]] ?? 0;
    var v3 = _base32Decode[base32[i++]] ?? 0;
    var v4 = _base32Decode[base32[i++]] ?? 0;
    var v5 = _base32Decode[base32[i++]] ?? 0;
    bytes.add((v1 << 3 | v2 >> 2) & 255);
    bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
    bytes.add((v4 << 4 | v5 >> 1) & 255);
  } else if (remain == 7) {
    var v1 = _base32Decode[base32[i++]] ?? 0;
    var v2 = _base32Decode[base32[i++]] ?? 0;
    var v3 = _base32Decode[base32[i++]] ?? 0;
    var v4 = _base32Decode[base32[i++]] ?? 0;
    var v5 = _base32Decode[base32[i++]] ?? 0;
    var v6 = _base32Decode[base32[i++]] ?? 0;
    var v7 = _base32Decode[base32[i++]] ?? 0;
    bytes.add((v1 << 3 | v2 >> 2) & 255);
    bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
    bytes.add((v4 << 4 | v5 >> 1) & 255);
    bytes.add((v5 << 7 | v6 << 2 | v7 >> 3) & 255);
  }
  return Uint8List.fromList(bytes);
}