[Flutter 基础] - Flutter基础组件 - Image

Image组件是Flutter中的基础组件之一,也是我们常用来展示图片的核心组件。它既可以展示本地图片,也可以展示网络图片。 这篇文章主要是通过一些简单的demo来了解一下这个组件基本用法。


一、基本用法

首先得确保在 pubspec.yaml 中配置有配置过图片的基础路径,否则项目可能识别不到图片的本地路径:

yaml 复制代码
flutter:
  assets:
    - assets/images/  # 指定图片目录

我们常用的图片加载方式一般都分为三种:

1. 加载本地图片
  • 使用 Image.asset 加载
dart 复制代码
 Image.asset('assets/images/girl.jpeg',  // 图片的本地地址
   width: 100,
   height: 100,
   fit: BoxFit.cover, // 图片填充方式
 );
2. 加载网络图片
  • 使用 Image.network

    dart 复制代码
    Image.network(
      'https://picsum.photos/200', // 图片的url地址
      fit: BoxFit.cover,
      width: 200,
      height: 200,
    );
3. 从二进制数据加载

网络图片除了直接url的方式,还有一种是通过接口返回二进制数据或者base64位的数据。image组件也是支持的。

  • 使用 Image.memory (适用于从数据库或加密存储读取的二进制数据):

    dart 复制代码
    Image.memory(
      Uint8List.fromList(bytes), // bytes 是二进制数据
      scale: 2.0, // 缩放系数(适配高分辨率设备)
    );

二、关键属性详解

1. 尺寸控制

  • widthheight
    • 直接设置图片宽高,但可能因比例导致变形。
    • 最佳实践 :优先使用 fit 属性控制填充方式,而非强制设置尺寸。

2. fit 属性(填充模式)

控制图片如何适应容器,共有 7 种模式

模式 行为描述 典型场景
BoxFit.fill 拉伸填满容器,忽略宽高比(可能导致变形) 背景图(需完全覆盖)
BoxFit.contain 保持比例缩放,完整显示内容,可能留白 产品详情图、需完整展示的图标
BoxFit.cover 保持比例缩放,完全覆盖容器并裁剪超出部分 用户头像、封面图
BoxFit.fitWidth 按宽度填满容器,高度按比例缩放,可能超出或留白 横向轮播图(固定宽度)
BoxFit.fitHeight 按高度填满容器,宽度按比例缩放,可能超出或留白 纵向海报(固定高度)
BoxFit.scaleDown 缩小图片以适应容器,但不会放大(原图比容器小则保持原尺寸) 动态内容(避免小图被放大)
BoxFit.none 以原始尺寸显示,可能溢出或被裁剪(需配合 clipBehavior 像素级精确显示(游戏贴图)

3. 其他常用属性

  • alignment :调整图片在容器中的对齐方式(默认 Alignment.center)。
  • colorcolorBlendMode:为图片添加混合颜色(如半透明背景色)。
  • repeat :设置图片重复方式(noRepeatrepeatrepeatXrepeatY),适用于背景图。
  • gaplessPlayback:避免图片加载时的闪烁(适用于动画)。

三、特殊效果实现

项目开发过程中,很少直接使用长方形,或者正方形的图片,大多数都是需要经过一些特殊处理,比如圆形的头像,圆角的长方形或者正方形等。那这种场景就可以借助ClipOvalClipRect来实现这个效果。

1. 圆形/圆角图片

  • 使用 ClipOvalClipRRect
less 复制代码
```dart
ClipOval(
  child: Image.network(
    'https://example.com/avatar.jpg',
    fit: BoxFit.cover,
    width: 100,
    height: 100,
  ),
);
```
dart 复制代码
ClipRRect(
  borderRadius: BorderRadius.circular(30),
  child: Image.network(
    'https://picsum.photos/300',
    fit: BoxFit.cover,
    width: 200,
    height: 200,
  ),
);

2. 背景色混合

  • 通过 colorcolorBlendMode 添加滤镜
dart 复制代码
ClipRRect(
  borderRadius: BorderRadius.circular(30),
  child: Image.network(
    'https://picsum.photos/300',
    width: 200,
    height: 200,
   color: Colors.red.withOpacity(0.5),
   colorBlendMode: BlendMode.srcOver,
  ),
);

七、总结

Flutter 的 Image 组件功能强大,通过灵活使用 fitwidth/heightClipOval等特性,可以高效实现复杂图片展示需求。尤其是特殊效果(如圆形、滤镜)可借助 ClipBlendMode 实现。

相关推荐
浩宇软件开发16 分钟前
Android开发,实现一个简约又好看的登录页
android·java·android studio·android开发
未扬帆的小船30 分钟前
在gpt的帮助下安装chales的证书,用于https在root情况下抓包
android·charles
万户猴34 分钟前
【 Android蓝牙-十】Android各版本蓝牙行为变化与兼容性指南
android·蓝牙
张风捷特烈2 小时前
FFmpeg 7.1.1 | 调试 ffmpeg.c 环境 - Widows&Clion&WSL
android·ffmpeg
努力努力再努力wz2 小时前
【Linux实践系列】:进程间通信:万字详解命名管道实现通信
android·linux·运维·服务器·c++·c
百锦再3 小时前
Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)
android·xml·学习·sqlite·kotlin·android studio·数据库开发
Gerry_Liang3 小时前
Java基础361问第16问——枚举为什么导致空指针?
android·java·开发语言
ZhuAiQuan3 小时前
[flutter]切换国内源(window)
flutter
York_魚4 小时前
FlutterEngine源码编译之2025年版教程
前端·flutter