encodeBase64Bytes function
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;
}