使用图像文件颤动加载图像资产

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(来自弹出页面的文件)时,我执行 setstateimageName1

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,
         ),
       ),