1

我正在使用图像选择器从设备(应用程序)中选择图像,然后将该文件存储在提供程序类中。

  File? _img;
  get img=> _img;
  void putbannerimg(File img) {
  _img = img;
  notifyListeners();
  }

我发现图像选择器不压缩 png 图像,我尝试用 flutter_image_compress 压缩它

compressFile() async {
final formservice = Provider.of<PostForm>(context, listen: false);

File file = formservice.bannerfile;

final result = await FlutterImageCompress.compressWithFile(
  file.absolute.path,
  quality: 54,
);
formservice.putbannerimg(File.fromRawPath(result!));

我试过这种方式和其他多种方式,但得到不同的不同错误我想像这样在firebase存储中上传这个文件

    var task = storageicon.putFile(formservice.iconfile);

请告诉我哪里出错了,没有压缩文件一切正常

编辑:我发现路径应该是一个字符串如何解析本地代码文件

4

1 回答 1

0

如果您使用的是“ flutter_image_compress ”包

您可能必须对存储在手机上的文件使用压缩功能,如下所示:

Future<File> testCompressAndGetFile(File file, String targetPath) async {
var result = await FlutterImageCompress.compressAndGetFile(
    file.absolute.path, targetPath,
    quality: 88,
    rotate: 180,
  );

print(file.lengthSync());
print(result.lengthSync());

return result;

}

“compressAndGetFile()”返回一个文件,而“compressWithFile()”返回一个 Uint8List。

如果我正确理解您的最后一个问题,那么您想默认使用内置于您的应用程序中的图像。为此,您必须打开“pubsepc.yaml”,转到“flutter:”标记并添加“assets:”,如下所示:

flutter:
  assets:
    - path

在我的示例中,“路径”描述了包含图片等资产的顶级文件夹。你可以自由地描述它的名字。

于 2021-08-11T07:06:32.470 回答