无法加载资产颤振(不是资产是保存的文件)

Posted

技术标签:

【中文标题】无法加载资产颤振(不是资产是保存的文件)【英文标题】:Unable to load asset flutter ( not assets is a saved file ) 【发布时间】:2020-12-08 09:58:47 【问题描述】:

当用户拍摄照片或视频时,我将此文件保存到应用程序文件夹 当我尝试使用 xcode 访问保存的文件夹时,我可以毫无问题地看到图像或视频。

拍摄并保存这张照片后,应用程序可以访问图像或视频,我可以在我的应用程序中显示它

但是过了一会儿或当我关闭并重新打开手机时,此文件无法访问 但如果我想显示在使用 xcode 打开的应用程序文件夹中,我可以显示文件

这是我的保存图片代码

   Future<void> saveFile(BuildContext context, int fileType,
          Function(String path) onComplete) async 
        File file = await Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) => fileType == 0 ? Camera() : Video()));
        if (file != null) 
          var savedFile = await getNewFile(file, fileType);
    
          if (fileType == 0) 
            GallerySaver.saveImage(savedFile.path).then((result) async 
              if (result)
                onComplete(savedFile.path);
              else
                onComplete("");
            );
           else 
            GallerySaver.saveVideo(savedFile.path).then((result) async 
              if (result)
                onComplete(savedFile.path);
              else
                onComplete("");
            );
          
         else 
          onComplete("");
           

Future<File> getNewFile(File file, int fileType) async 
    final Directory path = await getApplicationDocumentsDirectory();
    var fileName = UniqueKey()
            .toString()
            .replaceAll("[", "")
            .replaceAll("]", "")
            .replaceAll("#", "") +
        (fileType == 0 ? ".png" : ".mp4");

    return await file.copy('$path.path/$fileName');
  

您遇到错误 B4A3B.MP4 未找到,但它已经在路径中

您可以看到的图像右下角

开始加载没有问题,但过了一段时间它没有显示在我的应用程序中

【问题讨论】:

是否在 pubspec.yaml 中添加了文件? 不,这不是资产文件,这是保存图像文件到手机应用程序文件夹 请从控制台发布整个错误,抛出异常 错误是:无法加载资产 ..../documents/b4a3b.mp3 一行不够,错误会包含堆栈,在加载文件时使用try catch块,同时记录错误和堆栈 【参考方案1】:

如果您更改资产文件(创建、删除、更改名称...),您必须停止,使用 flutter clean 清理然后再次运行。

【讨论】:

发现错误我认为应用程序 ID 在我运行此命令“flutter-run”时发生更改,首先它说 /var/mobile/Containers/Data/Application/4EA1D0AA .... 但我调试它说 /var/mobile/Containers/Data/Application/FFD0-4DED ......它总是在改变为什么? 我认为在flutter clean applicationid发生变化并且之前的文件夹被删除之后我错了吗? 我不确定。可能是 /var/mobile/Containers/Data/Application/.. 被保存为缓存,所以它会在flutter clean或每次flutter运行后再次创建。

以上是关于无法加载资产颤振(不是资产是保存的文件)的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 无法在物理设备上加载图像资产(但在模拟器上加载它就好了)

从颤振资产加载 .pdf 文件/自定义文件

从 Visual Studio IDE 运行时,项目无法加载图像资产

Flutter:无法加载资产文件“car.png”

由于授权,WKWebview 无法加载资产文件

无法从组件中的资产加载 css