Imagepicker'XFile'不是类型转换和Firebase存储图像上传错误中'File'类型的子类型

Posted

技术标签:

【中文标题】Imagepicker\'XFile\'不是类型转换和Firebase存储图像上传错误中\'File\'类型的子类型【英文标题】:Imagepicker 'XFile' is not a subtype of type 'File' in type cast and Firebase Storage image upload errorImagepicker'XFile'不是类型转换和Firebase存储图像上传错误中'File'类型的子类型 【发布时间】:2021-11-20 20:29:22 【问题描述】:

我正在尝试使用 imagepicker 从图库中选择图像并将其上传到 firebasestorage。 当应用程序运行时,它给出错误“无法打开文件,路径 = ''(操作系统错误:错误地址,errno = 14)和未处理的异常:类型'XFile'不是类型转换中类型'File'的子类型' .

GestureDetector(
                  onTap: () => pickPhotoFromGallery(),
                  child: CircleAvatar(
                    radius: 70,
                    // ignore: unnecessary_null_comparison
                    child: (_imageFile != null)
                        ? Image.file(_imageFile)
                        : Image.asset('assets/images/icon.png'),
                  ),
                ),

Future pickPhotoFromGallery() async 
    File imageFile =
        (await _imagePicker.pickImage(source: ImageSource.gallery)) as File;

    setState(() 
      _imageFile = imageFile;
    );
  

当我单击保存按钮时,它显示“断言失败:第 127 行 pos 12: 'file.absolute.existsSync()': is not true." 我遇到了错误。

onPressed: uploading ? null : () => uploadImageAndSaveItemInfo(),
  uploadImageAndSaveItemInfo() async 
    setState(() 
      uploading = true;
    );

    String imageDownloadUrl = await uploadItemImage(_imageFile);

    saveItemInfo(imageDownloadUrl);
    saveItemInfoCategory(imageDownloadUrl);
  


  Future<String> uploadItemImage(File mFileImage) async 
    final Reference storageReference =
        FirebaseStorage.instance.ref().child("thumbnail");

    UploadTask uploadTask = storageReference
        .child(_idController.text.trim() + ".jpg")
        .putFile(mFileImage);

    String downloadUrl = await uploadTask.snapshot.ref.getDownloadURL();
    return downloadUrl;
  

Imagepicker 在旧版本中工作,在最新版本中出现错误。

【问题讨论】:

【参考方案1】:

原因是图像选择器已升级为使用 Xfile 而不是 File。要将 Xfile 转换为 File,您可以使用:

File file = File( _imageFile.path );

您还需要添加import 'dart:io'

【讨论】:

以上是关于Imagepicker'XFile'不是类型转换和Firebase存储图像上传错误中'File'类型的子类型的主要内容,如果未能解决你的问题,请参考以下文章

将 `std::floor()` 和 `std::ceil()` 转换为整数类型是不是总是给出正确的结果?

类型“List<Object?>”不是类型转换中“List<>”类型的子类型

数据类型的转换。 如何将List集合转换成String类型。不是String类型的数组,是String类型。

js你不是的那些基础问题-数据类型的转换

无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型

何时使用 trunc() 而不是 int() 将浮点类型数转换为整数更好?