Flutter中Base64字符串转图片遇FormatException错误求助
Flutter中Base64字符串转图片遇FormatException错误求助
嗨,我来帮你排查这个问题~你遇到的FormatException: Invalid length, must be multiple of four是Base64解码时的典型错误,本质是你的base64String不符合Base64编码的规范,下面给你几个针对性的解决思路:
核心原因
Base64编码的字符串长度必须是4的整数倍,当长度不够时,会用=作为填充字符补全。你的字符串长度不符合要求,大概率是末尾缺少了填充符,或者字符串本身有截断、混入了无效字符。
具体解决方案
补全Base64填充符
可以写一个简单的工具函数,自动补全缺失的=:String fixBase64Padding(String base64Str) { int remainder = base64Str.length % 4; if (remainder != 0) { base64Str += '=' * (4 - remainder); } return base64Str; }然后修改你的图片解码代码:
leading: Image(image: MemoryImage(base64Decode(fixBase64Padding(base64String)))),清理无效字符
有时候Base64字符串里会混入换行、空格或者其他非Base64允许的字符(Base64只允许A-Za-z0-9+/=这些字符),可以先过滤掉:String cleanBase64(String base64Str) { return base64Str.replaceAll(RegExp(r'[^A-Za-z0-9+/=]'), ''); }可以和上面的补全函数结合使用:
fixBase64Padding(cleanBase64(base64String))检查字符串完整性
确认你的base64String是不是完整的——比如从接口获取时有没有被截断,或者打印出完整的字符串内容,看看是不是中间有缺失。你可以先把这个字符串复制到本地的Base64解码工具里测试,看能不能正常解码出图片,这样能快速定位是字符串本身的问题还是代码处理的问题。
备注:内容来源于stack exchange,提问作者Mayati
相关产品推荐
相关产品推荐

