我尝试显示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
变量是正确的图像路径,我已经通过输出带有此变量的Text小部件来对此进行了检查。 (例如:/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)
但是图像存在并且路径正确.....这里可能是什么问题?
答案 0 :(得分:0)
您无需使用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();