encodeBase64Bytes function

Uint8List encodeBase64Bytes(
  1. Uint8List input
)

Implementation

Uint8List encodeBase64Bytes(Uint8List input) {
  final output = Uint8List(((input.length + 2) ~/ 3) * 4);
  var inputIndex = 0;
  var outputIndex = 0;
  while (inputIndex + 2 < input.length) {
    final bits =
        (input[inputIndex] << 16) |
        (input[inputIndex + 1] << 8) |
        input[inputIndex + 2];
    output[outputIndex] = _base64Alphabet.codeUnitAt((bits >> 18) & 0x3f);
    output[outputIndex + 1] = _base64Alphabet.codeUnitAt(
      (bits >> 12) & 0x3f,
    );
    output[outputIndex + 2] = _base64Alphabet.codeUnitAt((bits >> 6) & 0x3f);
    output[outputIndex + 3] = _base64Alphabet.codeUnitAt(bits & 0x3f);
    inputIndex += 3;
    outputIndex += 4;
  }

  final remaining = input.length - inputIndex;
  if (remaining == 1) {
    final byte = input[inputIndex];
    output[outputIndex] = _base64Alphabet.codeUnitAt(byte >> 2);
    output[outputIndex + 1] = _base64Alphabet.codeUnitAt((byte & 0x03) << 4);
    output[outputIndex + 2] = 0x3d;
    output[outputIndex + 3] = 0x3d;
  } else if (remaining == 2) {
    final bits = (input[inputIndex] << 8) | input[inputIndex + 1];
    output[outputIndex] = _base64Alphabet.codeUnitAt((bits >> 10) & 0x3f);
    output[outputIndex + 1] = _base64Alphabet.codeUnitAt((bits >> 4) & 0x3f);
    output[outputIndex + 2] = _base64Alphabet.codeUnitAt((bits & 0x0f) << 2);
    output[outputIndex + 3] = 0x3d;
  }
  return output;
}