自 Flutter 1.12 发布以来,我的以下代码:
static MyInheritedWidget of(BuildContext context) {
return context.inheritFromWidgetOfExactType(MyInheritedWidget) as MyInheritedWidget;
}
Run Code Online (Sandbox Code Playgroud)
警告如下:
'inheritFromWidgetOfExactType' 已弃用,不应使用。改用dependOnInheritedWidgetOfExactType。此功能在 v1.12.1 之后被弃用。尝试用替换来替换弃用成员的使用。
但是当我尝试更换它时,它不起作用:
static MyInheritedWidget of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType(MyInheritedWidget) as MyInheritedWidget;
}
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?谢谢!
我在我的应用程序中进行了聊天,用户可以在其中发送短信或上传文件(仅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']}');
Run Code Online (Sandbox Code Playgroud)
该OpenFile.open()功能完成了预期的功能,当它是pdf时,它显示的软件选项,或者仅使用默认的图片查看器显示图像。
重要信息:我使用base64,因为此聊天中的文件是私有文件(票据,与银行相关的文件...),因此,例如由于它们位于服务器的私有文件夹中,因此无法从浏览器访问它们。
我正在使用以下库:
更新
我已经尝试过使用iOS(iphone 8 iOS 12.2)和我的个人电话(samsung s8plus android 9),它可以完美地工作。我一直在尝试的手机是android 6的huawei p8 lite。我将继续进行更多测试,以查看错误是否是该款特定手机,android版本等。
更新2
我以某种方式解决了它。我将flutter项目迁移到AndroidX,然后将所有flutter包依赖项更新为最新版本。我不知道这是否是解决问题的方法,但是现在我可以从android 6设备打开这些文件了。欢呼!