【问题标题】:Trying to save a list of image names to Firestore尝试将图像名称列表保存到 Firestore
【发布时间】:2021-05-25 12:48:35
【问题描述】:

我正在尝试将从 imagepicker 获取的图像名称保存到 firestore 数据库

我是如何声明的

List<File> _imageName = [];

保存名称

_imageName.add(File(Path.basename(pickedFile.path)));

_imageName 的输出

[文件:'image_picker2088970390141772511.jpg',文件:'image_picker4765409869719291061.jpg',文件:'image_picker8815762890677993639.jpg',文件:'image_picker2293914669929574097.jpg']

我如何尝试将其保存到 Firestore 中

"imageUrl": FieldValue.arrayUnion(imageUrl),

错误

E/flutter (30296):[错误:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:无效参数:“_File”实例

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    您好,您无法将文件类型直接保存到 Firestore,您需要将其保存为字符串。例如,如果您只想要文件的名称,请尝试在创建数组时从路径中提取它,

    imageName.add(File(Path.basename(pickedFile.path)).path.split('/').last)

    或者因为你已经有了路径。

    imageName.add(pickedFile.split('/').last)

    最后,如果您需要实际保存文件而不仅仅是路径,那么您可能需要为此使用 firebase 存储。

    您还可以创建一个扩展名,只在您的文件上使用 .name 方法。例如:

    import 'dart:io';
    
    extension FileExtention on FileSystemEntity{
      String get name {
        return this?.path?.split("/")?.last;
      }
    }
    

    然后你会做这样的事情: imageName.add(File(Path.basename(pickedFile.path)).name)

    【讨论】:

    • @zerochill 抱歉,我编辑了我的答案,因为我最初误读了。您知道只有保存名称的正确方法。
    • 它给出了一个错误“参数类型'String'不能分配给参数类型'File'。然后我将“List _imageName = [];”更改为List _imageName = []; 那么你的代码就可以工作了。谢谢你帮助gbaccetta。
    • 不客气:对不起,我应该指定将列表类型从文件更改为字符串
    • gbaccetta 有什么方法可以将 getDownloadUrl() 传递给 the_imageName 列表,因为我不知道如何仅获取名称的图像,
    • 为此,您应该更具体,也许用更多代码提出一个新问题。实际上,这取决于您在谈论什么 downloadUrl。如果图像来自服务器,则实际上将 url 存储在 firestore 上,而不是我建议的 url 的最后一部分,您将获得整个链接...但是,如果图像位于更复杂的本地存储上,则作为本地存储也可以更改...您可能希望先将其上传到 Firebase 存储...所以这又取决于您的用例和设置。除此之外,url/path 是一个字符串,作为一个简单文件名的字符串
    猜你喜欢
    • 2015-01-05
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多