如何为我的 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 和名称。