【问题标题】:Showing images from local app directory in Flutter在 Flutter 中显示本地应用目录中的图像
【发布时间】:2020-07-29 12:07:51
【问题描述】:

我尝试在 Flutter 中显示本地应用目录中的图像。保存图像效果很好。拍完照片后,我将最终的目录字符串保存在数据库中。然后我尝试在 Listview 中显示所有图像。

我如何保存图像:

Future<void> _addPictureToGallery() async {
      final picker = ImagePicker();
      final imageFile =
          await picker.getImage(source: ImageSource.camera, maxWidth: 600);

      final appDir = await syspath.getApplicationDocumentsDirectory();

      final fileName = path.basename(imageFile.path);

      final savedImage =
          File(imageFile.path).copy('${appDir.path}/albums/$albumID/$fileName');

      picturesData.add(Picture(
          album: albumID,
          path: '${appDir.path}/albums/$albumID/$fileName'.toString(),
          timestamp: Timestamp.now()));
    }

首先我将图像复制到应用目录。然后我将图片路径保存在数据库中。

之后我想用Image.file 显示所有图像。但这一步不起作用。

我的代码

body: Center(
        child: FutureBuilder(
            future: picturesData.getAll(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (!snapshot.hasData ||
                  snapshot.connectionState == ConnectionState.waiting) {
                return Center(
                  child: CircularProgressIndicator(),
                );
              } else {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      return Image.file(File(snapshot.data[index].path));
                    });
              }
            }),
      ),

snapshot.data[index].path 变量是正确的图像路径,我通过输出带有此变量的文本小部件来检查这一点。 (例如:/var/mobile/Containers/Data/Application/884283C4-FC82-4DDB-B0C2-43BABC2D660E/Documents/albums/6/image_picker_ACF15E5E-FDB1-4B65-A56C-5B707F5EEECB-34279-00002AD6A23369E1.jpg

但是,如果我尝试使用此变量输出图像,则会收到错误消息: Cannot open file, path = '/var/mobile/Containers/Data/Application/884283C4-FC82-4DDB-B0C2-43BABC2D660E/Documents/albums/6/image_picker_ACF15E5E-FDB1-4B65-A56C-5B707F5EEECB-34279-00002AD6A23369E1.jpg' (OS Error: No such file or directory, errno = 2)

但是图像存在并且路径是正确的.....这可能是什么问题?

【问题讨论】:

  • 在 Android 上,这可能需要 android.permission.READ_EXTERNAL_STORAGE 权限。 引用自 Image.file docs 。也许这可能是问题所在。
  • 我在真正的 iOS 设备上试用它。是否还需要权限?
  • 没有。对于 iOS 文档,请不要提及任何此类内容。
  • 是的,我看到了,但还没有解决方案..:/

标签: flutter dart


【解决方案1】:

你需要使用Image.asset 不需要File

  String _path = "";

  Future<void> _addPictureToGallery() async {
    final picker = ImagePicker();
    final imageFile =
        await picker.getImage(source: ImageSource.gallery, maxWidth: 600);

    setState(() {
      _path = '${imageFile.path}';
    });
  }

//build

return  _path.isNotEmpty ? Image.asset(_path) : Container();

【讨论】:

  • Unable to load asset: /Users/username/Library/Developer/CoreSimulator/Devices/BE42E172-AC16-43FF-959A-6F2D17143416/data/Containers/Data/Application/7DE77FB9-3C97-4E6C-A5C3-04DEA21475ED/Documents/albums/4/image_picker_A455D246-C655-4CDA-B0CE-F1CBABD8409D-27000-000010590C7A6B67.jpg
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 2020-04-27
相关资源
最近更新 更多