如何在Flutter web中获取图像的路径?

z9gpfhce  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(164)

我在Flutter应用程序中使用image_picker。当我在Flutter web中测试我的应用时,它说我不能在Flutter web中使用path参数。
但是,我需要得到图像的路径。怎么做?
我在谷歌上搜索了这个问题,我问了Google Bard和ChatGPT,但没有找到解决方案。
我试着改用image_picker_web,但没有找到解决方案。
我的一些代码:

XFile? image = await ImagePicker().pickImage(source: ImageSource.gallery);

if (image != null) {
  if ((await File(image.path).length()) > 1000000) {
    return "Oversize";
  } else {
    TaskSnapshot selectedImage = await …(id, File(image.path));

    return await selectedImage.ref.getDownloadURL();
  }
}
nzkunb0c

nzkunb0c1#

是的,在Flutter web中,你不能使用路径,所以在我的例子中,我使用file_picker包来选择一个文件,并指定我需要的文件类型,然后我使用mime来获取mime类型。我的上传文件看起来像这样:

uploadFiles() async {
  FilePickerResult? result = await FilePicker.platform.pickFiles(
    type: FileType.custom,
    allowMultiple: false,
    allowedExtensions: ['jpg', 'pdf', 'doc'],
  );

  if (result != null && result.files.isNotEmpty) {
    final fileBytes = result.files.first.bytes;

    final fileName = result.files.first.name;

    final mime = lookupMimeType('', headerBytes: fileBytes);
    return DocModel(
      name: fileName,
      mimeType: mime,
      fileBytes: fileBytes,
      file: File.fromRawPath(fileBytes!),
    );
  } else {
    // User canceled the picker
    return DocModel();
  }
}

然后我的DocModel看起来像这样:

class DocModel {
  int? id;
  String? path;
  String? name;
  File? file;
  String? mimeType;
  Uint8List? fileBytes;

  DocModel({
    this.path,
    this.name,
    this.file,
    this.mimeType,
    this.id,
    this.fileBytes,
  });
}

然后显示图像,我使用Image.memory(fileBytes from model)
工作代码可以在这里找到Github

相关问题