Base64:无效长度必须是四的倍数:颤振错误

kim*_*Soo 4 base64 image dart flutter

我获得了图像 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,
                      ),
                    ],
                  ),
Run Code Online (Sandbox Code Playgroud)

jps*_*jps 5

您需要用一两个“=”填充 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;
      }
Run Code Online (Sandbox Code Playgroud)