我在我的应用程序中进行了聊天,用户可以在其中发送短信或 上传文件(仅jpg和pdf)。对于文件,我将以base64编码的文件发送到服务器,然后在服务器端进行转换。 接下来的所有步骤都已经完成:
在颤动侧,我得到了字符串,并对其进行了解码。这就是我遇到的问题:
如果我将解码的base64字符串直接用作Image.memory(Uint8List),则显示没有问题。因此,该问题与base64字符串无关。
但这不是我想要的行为,因为如果文件不存在,我希望第一次“下载”该文件,然后如果存在,我只想打开它(将os默认软件用于图片或pdf)
这是我用于保存文件的代码:
String dir = (await getApplicationDocumentsDirectory()).path;
String archivoBase64 = await _repository.getArchivoBase64FromMensaje({'id': data['comentario']['id']});
await File('$dir/${data['comentario']['texto']}').writeAsBytes(base64.decode(archivoBase64).buffer.asUint8List());
await OpenFile.open('$dir/${data['comentario']['texto']}');
OpenFile.open()
函数完成了预期的功能,当它是pdf时,它显示的软件选项,或者仅显示具有默认图片查看器的图像。
重要提示:我使用base64,因为此聊天中的文件是私有文件(票据,与银行相关的文件...),因此,例如由于它们位于服务器的私有文件夹中,因此无法从浏览器进行访问。>
我正在使用这些库:
更新
我已经尝试过使用iOS(iphone 8 iOS 12.2)和我的个人电话(samsung s8plus android 9),并且效果很好。我一直在尝试的手机是android 6的huawei p8 lite。我将继续进行更多测试,以查看错误是否出在这款特定的手机,android版本等上。
UPDATE2
我已经解决了。我将flutter项目迁移到AndroidX,然后将所有flutter包依赖项更新为最新版本。我不知道这是否是解决问题的方法,但是现在我可以从android 6设备打开这些文件了。哇!