文件未从 DocumentDirectory Path Flutter 加载

问题描述

我是 Flutter 的新手。

我构建了一个简单的演示应用程序,用户可以在其中填写简单的表单,一旦用户按下按钮,这些数据就会保存到 sqlite DB 中。

只有 3 个内容标题、图像路径(图像保存到 DocumentDirectory)、位置详细信息。

添加屏幕

enter image description here

列表屏幕

enter image description here

以下是我将图像复制到路径的代码

Future<void> _takePicture() async {
    final picker = ImagePicker();
    final pickedFile = await picker.getimage(
      source: ImageSource.camera,maxWidth: 600,);

    if (pickedFile == null) {
      return;
    }
    setState(() {
      _storedImage = File(pickedFile.path);
    });
    final appDir = await syspaths.getApplicationDocumentsDirectory();
    String relativePath = '/' +
        DateTime.Now().millisecondsSinceEpoch.toString() +
        path.basename(pickedFile.path);

    String newPath = '${appDir.path}' + relativePath;
    final savedImage = await File(pickedFile.path).copy('$newPath');
    widget.onSelectimage(savedImage);
  }

商品代码

child: Card(
    elevation: 5,child: ListTile(
        leading: CircleAvatar(
            backgroundImage: FileImage(greatPlaces.items[index].image),),title: Text(greatPlaces.items[index].title),subtitle: Text(
            greatPlaces.items[index].location.address),onTap: () {
            print(greatPlaces.items[index].image);
            //Go to detail page...
        },)

问题 ==> 当我添加新地点并查看添加的地点列表时,图像加载正常,但是当我停止并重新运行项目时,出现以下错误并且图像未加载。

enter image description here

错误

======== 图像资源服务捕获的异常 ============================ 以下 filesystemexception 是 抛出解析图像编解码器:无法打开文件,路径 = '/var/mobile/Containers/Data/Application/607FB621-ABDA-472F-8B7A-D9B1BEC4A15D/Documents/1616508266743image_picker_34814E6F-218C-48F6-BE36-C401070jpg7040jpg7040jpg7160 (OS Error: No such file or directory,errno = 2) 当异常 被抛出,这是堆栈 #0 _File.open。 (dart:io/file_impl.dart:356:9)(从 dart:async 中删除了 13 帧)路径: /var/mobile/Containers/Data/Application/607FB621-ABDA-472F-8B7A-D9B1BEC4A15D/Documents/1616508266743image_picker_34814E6F-218C-=====0=5=0-BE36-C4D410000000000 ================================================= ===================

我下载了应用程序容器并确认图像存在于同一位置。 greatPlaces.items[index].image 返回文件

注意: ==> 相同的代码在 Android 设备中运行良好。

如果有人帮助我,这将非常有帮助。谢谢

解决方法

每次应用更新后,iOS 上的文档目录路径都会发生变化。因此,不能存储存储在此目录中的文件的绝对路径。相反,每次访问文件时,都需要存储相对路径,然后将它们与 getApplicationDocumentsDirectory() 返回的值连接起来。