firebase 图像裁剪器与Uint 8List文件配合使用-抖动

xlpyo6sf  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(135)

我使用的是image_pickerImageCropper包,我想把用户给定的图片保存到firestore数据库中,所以我使用了如下函数。

  • 首先,设置File? _image;
  • 裁剪和拾取功能
Future _pickImage(ImageSource source) async {
         Navigator.of(context).pop();
        try {
          final image = await ImagePicker().pickImage(source: source);
           if (image == null) return;
           File? img = File(image.path);
    img = await _cropImage(imageFile: img);
    setState(() {
      _image = img;
    });
  } on PlatformException catch (e) {
    print(e);
    Navigator.of(context).pop();
  }
}

      Future<File?> _cropImage({required File imageFile}) async {
  CroppedFile? croppedImage =
      await ImageCropper().cropImage(sourcePath: imageFile.path);
  if (CroppedFile == null) return null;
  return File(croppedImage!.path);
}

用这个把数据保存到firestore

Future<String> uploadImageToStorage(
    File file,
  ) async {
    file
    Reference ref =
        _storage.ref().child("profilePics").child(_auth.currentUser!.uid);

    UploadTask uploadTask = ref.putData(file);

    TaskSnapshot snap = await uploadTask;
    String downloadUrl = await snap.ref.getDownloadURL();
    return downloadUrl;
  }

上面的函数不适用于文件类型的数据,它支持Uint8List。那么,我该怎么做呢?
下一个问题是,我正在获取文件类型的数据与ImagePicker的个人资料图片。这不是问题吗?

zqry0prt

zqry0prt1#

尝试将_cropImage-方法更改为返回XFile?,如下所示:

Future<XFile?> _cropImage({required File imageFile}) async {
  CroppedFile? croppedImage =
      await ImageCropper().cropImage(sourcePath: imageFile.path);
  if (CroppedFile == null) return null;
  return XFile(croppedImage!.path);
}

你还需要把uploadImageToStorage的参数改为XFile file,然后你就可以用file!.readAsBytes();得到一个Uint8List

Future<String> uploadImageToStorage(
  XFile file,
) async {
  Reference ref =
      _storage.ref().child("profilePics").child(_auth.currentUser!.uid);

  final fileBytes = await file.readAsBytes();
  UploadTask uploadTask = ref.putData(fileBytes);

  TaskSnapshot snap = await uploadTask;
  String downloadUrl = await snap.ref.getDownloadURL();
  return downloadUrl;
}

相关问题