使用图像文件颤动加载图像资产
Flutter load image asset with image file
我有一个页面允许用户 post 一些东西,其中包括一张图片。当页面加载时,它会加载一个 default.png
图片,当用户点击它时,用户将被重定向到另一个页面,他们可以在那里拍照或从图库中选择。
这里的主要问题是,当 my post an item page
加载时,它会查看 Image.asset
并看到空值。因此,Image.asset
能够加载 defaultImage
,但是当用户选择图像或拍照时,返回的值是 File
并附有 path
它使它成为 String
(如下所示)
child: Image.asset(
imageName1?.path ?? defaultImage,
fit: BoxFit.cover,
),
因此,Image.asset
无法加载此 File.path
这是我得到的错误:
Exception has occurred.
FlutterError (Unable to load asset: /data/user/0/com.flutter_project/cache/image_picker4920072427102948834.jpg)
我知道 Image.file
可以与 file.path
一起使用...但是我真的需要在某处进行 if 语句以确保正确显示图像吗?
有没有更简单的方法?
额外注意:当我在我的 visual studio 中进行刷新时(虽然我的应用程序是 运行)图像实际上加载了(它应该)......非常奇怪......
我的页面是 stateful
,当我传递 result
(来自弹出页面的文件)时,我执行 setstate
到 imageName1
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => PhotoPreviewPage()),
);
setState(() {
imageName1 = result;
});
您可以按照下面的方式进行操作。
File imageName1;
一旦您从弹出的路线中获得了来自导航器的所选图像结果的图像。
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => PhotoPreviewPage()),
);
setState(() {
imageName1 = File(result.path);
});
在构建方法中。
(imageName1 == null)
? ClipOval(
child: SizedBox(
width: 120.0,
height: 120.0,
child: CachedNetworkImage(
imageUrl: (widget.user.userImg != null) ? widget.user.userImg ?? '' : AssetImages.course,
placeholder: (context, url) => Center(child: CircularProgressIndicator()),
errorWidget: (context, url, error) => Image.asset(AssetImages.smallLoader),
fit: BoxFit.fill,
),
),
)
: ClipOval(
child: Image.file(
imageName1,
width: 120,
height: 120,
fit: BoxFit.cover,
),
),
我有一个页面允许用户 post 一些东西,其中包括一张图片。当页面加载时,它会加载一个 default.png
图片,当用户点击它时,用户将被重定向到另一个页面,他们可以在那里拍照或从图库中选择。
这里的主要问题是,当 my post an item page
加载时,它会查看 Image.asset
并看到空值。因此,Image.asset
能够加载 defaultImage
,但是当用户选择图像或拍照时,返回的值是 File
并附有 path
它使它成为 String
(如下所示)
child: Image.asset(
imageName1?.path ?? defaultImage,
fit: BoxFit.cover,
),
因此,Image.asset
无法加载此 File.path
这是我得到的错误:
Exception has occurred.
FlutterError (Unable to load asset: /data/user/0/com.flutter_project/cache/image_picker4920072427102948834.jpg)
我知道 Image.file
可以与 file.path
一起使用...但是我真的需要在某处进行 if 语句以确保正确显示图像吗?
有没有更简单的方法?
额外注意:当我在我的 visual studio 中进行刷新时(虽然我的应用程序是 运行)图像实际上加载了(它应该)......非常奇怪......
我的页面是 stateful
,当我传递 result
(来自弹出页面的文件)时,我执行 setstate
到 imageName1
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => PhotoPreviewPage()),
);
setState(() {
imageName1 = result;
});
您可以按照下面的方式进行操作。
File imageName1;
一旦您从弹出的路线中获得了来自导航器的所选图像结果的图像。
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => PhotoPreviewPage()),
);
setState(() {
imageName1 = File(result.path);
});
在构建方法中。
(imageName1 == null)
? ClipOval(
child: SizedBox(
width: 120.0,
height: 120.0,
child: CachedNetworkImage(
imageUrl: (widget.user.userImg != null) ? widget.user.userImg ?? '' : AssetImages.course,
placeholder: (context, url) => Center(child: CircularProgressIndicator()),
errorWidget: (context, url, error) => Image.asset(AssetImages.smallLoader),
fit: BoxFit.fill,
),
),
)
: ClipOval(
child: Image.file(
imageName1,
width: 120,
height: 120,
fit: BoxFit.cover,
),
),