【发布时间】: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 文档,请不要提及任何此类内容。
-
是的,我看到了,但还没有解决方案..:/