我使用的是image_picker
和ImageCropper
包,我想把用户给定的图片保存到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的个人资料图片。这不是问题吗?
1条答案
按热度按时间zqry0prt1#
尝试将
_cropImage
-方法更改为返回XFile?
,如下所示:你还需要把
uploadImageToStorage
的参数改为XFile file
,然后你就可以用file!.readAsBytes();
得到一个Uint8List
。