Flutter Web目前处于测试阶段,因此缺乏如何做到这一点的可用信息/资源。
我找不到任何与网页兼容的flutter软件包来做这件事。有什么提示吗?
下面是我的代码:
uploadImage() async {
File file;
FileReader fileReader = FileReader();
InputElement uploadInput = FileUploadInputElement();
uploadInput.click();
uploadInput.onChange.listen((event) {
file = uploadInput.files.first;
fileReader.readAsDataUrl(file);
fileReader.onLoadEnd.listen((event) {
if (file.type == "image/jpg" || file.type == "image/jpeg" || file.type == "image/png") {
String base64FileString = fileReader.result.toString().split(',')[1];
//COMPRESS FILE HERE
setState(() {
userImgFile = file;
userImageByteMemory = base64Decode(base64FileString);
});
} else {
CustomAlerts().showErrorAlert(context, "Image Upload Error", "Please Upload a Valid Image");
}
});
});
}
4条答案
按热度按时间um6iljoc1#
我已经花了几天的时间试图弄明白它。这里是你需要了解的。在我写这篇文章的时候,没有合适的库/包可以压缩flutter web中的图像。所以我最终在我的项目中使用javascript代码。
不要担心,这不是太多的工作。你也可以阅读我的博客完整的例子。
这是你需要做的。
同时创建名为app.js的新js文件并导入。**
一个二个一个一个
如果您希望通过dart.将文件上传到服务器,则将文件发送到dart,然后再从dart发送到server/firebase。
要将压缩文件发送给flutter,请添加以下代码行。
同时要在Flutter中接收,请确保您有此侦听器函数。
import 'dart:html' as html;
希望能帮到什么人,谢谢
wlp8pajw2#
因为一个纯粹的Flutter解决方案仍然存在,我将发布一个Flutter解决方案。但请注意,这个解决方案不是最好的性能wize。个人而言,如果我必须做一个PWA,我会在HTML/javascript中做,并完全抛弃Flutter。
Web解决方案的问题是我们不能真正创建一个文件,所以我们必须使用Uint 8List在内存中完成所有操作。为此,file_picker和image_compression_flutter包满足我们的要求。乍一看,最大的障碍是image_compression_flutter需要原始字节和路径(文件名),但深入研究后发现,该路径似乎仅用作确定mime类型的备用路径,因此我们实际上并不需要它,或者至少不是完整路径,这意味着我们可以使用file_picker执行以下操作(没有任何空值问题):
您必须导入foundation才能访问kIsWeb:导入“ Package :flutter/foundation. dart”;
使用image_compression_flutter,类似于:
要上传到Firebase存储,可以执行以下操作:
0yg35tkg3#
感谢@Kunchok Tashi使用pica js包想出了一个非常快速的解决方案。
安装https://pub.dev/packages/js包之前,请按以下步骤操作:
首先,将pica和您自己的js文件(本例中为app.js)添加到index.html中:
其次,app.js应该在
web
文件夹中,其内容如下:第三,在
lib
中的任意位置添加dart文件,其内容如下:最后,要调整图像大小,只需导入上述文件并调用:
sh7euo9m4#
目前,我将创建一个云函数,在文件上传到后端的firebase存储时调整/压缩文件。
下面的链接介绍了在问题解决之前,如何为需要解决方法的用户执行此操作:https://www.youtube.com/watch?v=OKW8x8-qYs0
编辑
image picker library已更新。可以在here中找到解决方案