我获得了图像 Base64 编码的图像数据,但我获得的其中一张图像未上传,并给出了以下形式的错误
无效长度必须是四的倍数。
另外,我的其他图像出现一会儿然后消失一会儿。他们来了又走。这个问题有解决办法吗?
Widget image(String thumbnail) {
final _byteImage = Base64Decoder().convert(thumbnail);
Widget image = Image.memory(_byteImage);
return image;
}
child: Column(
children: [
image(item.thumbnail),
Text(
item.name,
style: TextStyle(fontSize: 14, fontWeight: FontWeight.normal,fontFamily: 'Poppins'),
maxLines: 2,
),
],
),
首先你需要导入下面的内容,它应该定义
base64
变量:
import 'dart:convert';
然后,虽然其他语言的解码器可能会自动规范化base64 字符串,但这是 Flutter 和/或 Dart 所需要的:
String? stringFromBase64(String data) {
try {
data = base64.normalize(data);
return utf8.decode(base64.decode(data));
} catch (error, stackTrace) {
// ignore: avoid_print
print('Error: stringFromBase64: $error\n$stackTrace');
}
return null;
}
对于较旧的 Flutter 版本,您可能需要添加:
Base64Codec base64 = const Base64Codec();
您需要用一两个“=”填充 Base64 字符串,以达到 4 倍数的长度。
如果能不休息地除以4就可以了。如果长度模 4 的余数为 3,则在字符串中添加 1 个“=”,如果余数为“2”,则在字符串中添加 2 个“=”。
在 dart 中,您可以使用
"".length
获取字符串的长度,然后使用模运算符 %
计算除以 4 的余数:
由于实际问题是空字符串,因此以下代码还会检查空字符串或空字符串并显示占位符图像而不是错误消息。
Widget image(String thumbnail) {
String placeholder = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
if (thumbnail?.isEmpty ?? true)
thumbnail = placeholder;
else {
if (thumbnail.length % 4 > 0) {
thumbnail += '=' * (4 - thumbnail .length % 4) // as suggested by Albert221
}
}
final _byteImage = Base64Decoder().convert(thumbnail);
Widget image = Image.memory(_byteImage);
return image;
}