如何为我的 PickedFile 设置唯一的 UUID?
How can I set a unique UUID for my PickedFile?
我试图在上传到 Firestore 之前为从相机上传的图像提供唯一 ID。
我一直在使用 Reed Barger 的 https://www.udemy.com/course/build-a-social-network-with-flutter-and-firebase/ 教程,但他使用的一些代码已被弃用。在这种情况下,图像压缩。
他压缩和设置唯一图像 ID 的代码是
compressImage() async {
final tempDir = await getTemporaryDirectory();
final path = tempDir.path;
Im.Image imageFile = Im.decodeImage(file.readAsBytesSync());
final compressedImageFile = File('$path/img_$postId.jpg')
..writeAsBytesSync(Im.encodeJpg(imageFile, quality: 85));
setState(() {
file = compressedImageFile;
});
}
他使用的库包括
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'package:image/image.dart' as Im;
import 'package:uuid/uuid.dart';
他的变数是
File file;
String postId = Uuid().v4();
从那时起,image_picker
库允许我通过设置 imageQuality
来压缩图像,因此不需要 image.dart
包。我如何修改我的代码(如下)以设置 Reed 使用的格式的唯一图像 ID?
PickedFile file;
String postId = Uuid().v4();
handleTakePhoto() async {
Navigator.pop(context);
file = (await ImagePicker().getImage(
source: ImageSource.camera,
maxHeight: 675.0,
maxWidth: 960,
imageQuality: 85,
));
final tempDir = await getTemporaryDirectory();
final path = tempDir.path;
final compressedImageFile = File('$path/img_$postId.jpg');
setState(() {
this.file = file;
file = compressedImageFile;
});
}
事实上,它 returns 一个错误,compressedFileImage
无法分配给类型 PickedFile
。
我试过添加演员 as PickedFile
但这不起作用。
那是因为您正在创建 File
而不是 PickedFile
:
final compressedImageFile = File('$path/img_$postId.jpg');
只需将其更改为:
final compressedImageFile = PickedFile('$path/img_$postId.jpg');
到目前为止这已经奏效了。我创建了一个变量 File storedImage;
然后改变了
setState(() {
this.file = file;
file = compressedImageFile;
}
至
setState(() {
this.file = file;
storedImage = File(file.path);
storedImage = compressedImageFile;
print(compressedImageFile); //For debugging
}
打印语句为我提供了新的 uuid 和名称。
我试图在上传到 Firestore 之前为从相机上传的图像提供唯一 ID。 我一直在使用 Reed Barger 的 https://www.udemy.com/course/build-a-social-network-with-flutter-and-firebase/ 教程,但他使用的一些代码已被弃用。在这种情况下,图像压缩。 他压缩和设置唯一图像 ID 的代码是
compressImage() async {
final tempDir = await getTemporaryDirectory();
final path = tempDir.path;
Im.Image imageFile = Im.decodeImage(file.readAsBytesSync());
final compressedImageFile = File('$path/img_$postId.jpg')
..writeAsBytesSync(Im.encodeJpg(imageFile, quality: 85));
setState(() {
file = compressedImageFile;
});
}
他使用的库包括
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'package:image/image.dart' as Im;
import 'package:uuid/uuid.dart';
他的变数是
File file;
String postId = Uuid().v4();
从那时起,image_picker
库允许我通过设置 imageQuality
来压缩图像,因此不需要 image.dart
包。我如何修改我的代码(如下)以设置 Reed 使用的格式的唯一图像 ID?
PickedFile file;
String postId = Uuid().v4();
handleTakePhoto() async {
Navigator.pop(context);
file = (await ImagePicker().getImage(
source: ImageSource.camera,
maxHeight: 675.0,
maxWidth: 960,
imageQuality: 85,
));
final tempDir = await getTemporaryDirectory();
final path = tempDir.path;
final compressedImageFile = File('$path/img_$postId.jpg');
setState(() {
this.file = file;
file = compressedImageFile;
});
}
事实上,它 returns 一个错误,compressedFileImage
无法分配给类型 PickedFile
。
我试过添加演员 as PickedFile
但这不起作用。
那是因为您正在创建 File
而不是 PickedFile
:
final compressedImageFile = File('$path/img_$postId.jpg');
只需将其更改为:
final compressedImageFile = PickedFile('$path/img_$postId.jpg');
到目前为止这已经奏效了。我创建了一个变量 File storedImage;
然后改变了
setState(() {
this.file = file;
file = compressedImageFile;
}
至
setState(() {
this.file = file;
storedImage = File(file.path);
storedImage = compressedImageFile;
print(compressedImageFile); //For debugging
}
打印语句为我提供了新的 uuid 和名称。