base64Decode function

Uint8List base64Decode(
  1. String input
)

Implementation

Uint8List base64Decode(String input) {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  final lookup = <int, int>{};
  for (var i = 0; i < chars.length; i++) {
    lookup[chars.codeUnitAt(i)] = i;
  }
  final src = input.replaceAll(RegExp(r'[^A-Za-z0-9+/=]'), '');
  final len = src.length;
  final outputLen = (len * 3 ~/ 4) - (src.endsWith('==') ? 2 : src.endsWith('=') ? 1 : 0);
  final out = Uint8List(outputLen);
  var j = 0;
  for (var i = 0; i < len; i += 4) {
    final n0 = lookup[src.codeUnitAt(i)] ?? 0;
    final n1 = lookup[src.codeUnitAt(i + 1)] ?? 0;
    final n2 = i + 2 < len ? (lookup[src.codeUnitAt(i + 2)] ?? 0) : 0;
    final n3 = i + 3 < len ? (lookup[src.codeUnitAt(i + 3)] ?? 0) : 0;
    if (j < outputLen) out[j++] = (n0 << 2) | (n1 >> 4);
    if (j < outputLen) out[j++] = ((n1 & 0xF) << 4) | (n2 >> 2);
    if (j < outputLen) out[j++] = ((n2 & 0x3) << 6) | n3;
  }
  return out;
}