Flutter基础组件之Image

首先看一下Image的主要参数:

const Image({
    Key? key,
    required this.image,  
    this.frameBuilder,
    this.loadingBuilder,
    this.errorBuilder,
    this.semanticLabel,
    this.excludeFromSemantics = false,
    his.width, //图片的宽
    this.height, //图片高度
    this.color, //图片的混合色值
    this.colorBlendMode, //混合模式
    this.fit,//缩放模式
    this.alignment = Alignment.center, //对齐方式
    this.repeat = ImageRepeat.noRepeat, //重复方式
    this.centerSlice,
    this.matchTextDirection = false,
    this.gaplessPlayback = false,
    this.isAntiAlias = false,
    this.filterQuality = FilterQuality.low,
})

一、应用场景

开发中常用的场景有两种:① 加载本地图片(切图,icon等)②加载网络图片

1、加载assets图片

如下图,首先需要在pubspec.yaml中声明本地资源文件:

引用加载资源文件:

Image.asset(
    "assets/home/home_icon_share.png",
    width: 18,
    height: 18,
    fit: BoxFit.fill,
);

2、加载网络图片

Image.network(
    imageUrl,
    width: 120,
    height: 90,
    fit: BoxFit.cover,
);

二、图片圆角

1、圆角矩形图片

ClipRRect(
    borderRadius: BorderRadius.circular(4),
    child: Image.network(
        imageUrl,
        width: 104,
        height: 78,
        fit: BoxFit.cover,
    ),
);

2、圆形头像

ClipOval(
    child: Image.network(
        avatarUrl,
        width: 64,
        fit: BoxFit.cover,
        errorBuilder: _buildPlaceholder(),
    ),
);

三、遇到的问题

1、设定宽高

官方推荐我们在使用Image组件时,指定图片的宽、高参数或者将Image组件放置在严格布局约束之中,否则图像尺寸将随着图像的加载而改变,这将导致展示效果很差劲。

2、访问不到本地图片

我们按照以下目录结构定义和声明资源:

root
   ...   
   - android
   - assets
     - user
       - icon_avatar.png
       - xxx.png
   ...

使用以下代码加载图片资源时,运行到浏览器是正常显示的,但在Android上运行图片加载失败

Image.asset("user/icon_avatar.png")

错误日志:

When the exception was thrown, this was the stack: 
#0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:237:7)
<asynchronous suspension>
#1      AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:658:14)
<asynchronous suspension>
Image provider: AssetImage(bundle: null, name: "images/img_default_news.png")
Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#0fcd0(), name: "images/img_default_news.png", scale: 1.0)

发现改写成就好了

Image.asset("assets/user/img_default_news.png")

结论:引用本地资源时需要完整拼接到资源根目录(资源根目录+资源全名)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值