
在上一篇中,我们系统学习了:
从这一篇开始,我们要让页面真正“活”起来:
加入图标和图片
一个真实的 App 一定包含:
📌 没有 Icon 和 Image:
页面再整齐,也像“文档”,不像 App
Flutter 自带一套 Material Icons,开箱即用。
Icon(Icons.home)
Icon(
Icons.favorite,
size: 24,
color: Colors.red,
)
常用属性:
Icons 是 Flutter 内置的图标库,例如:
📌 在 VS Code 中输入 Icons. 就能看到全部提示。
Row(
children: [
Icon(Icons.location_on, size: 16),
SizedBox(width: 4),
Text('北京'),
],
)
这是非常典型的 UI 写法。
Flutter 中,图片主要分为两种来源:
1️⃣ 网络图片 2️⃣ 本地资源图片
Image.network(
'https://example.com/image.png',
)
Image.network(
'https://example.com/image.png',
width: 100,
height: 100,
fit: BoxFit.cover,
)
常见 BoxFit:
❌ 图片比例怪 ❌ 图片撑爆布局
📌 解决方案:
给 Image 明确宽高 + fit
推荐结构:
assets/
images/
avatar.png
banner.png
flutter:
assets:
- assets/images/
⚠️ 注意:
flutter pub getImage.asset(
'assets/images/avatar.png',
width: 80,
height: 80,
)
对比项 | Icon | Image |
|---|---|---|
来源 | 字体图标 | 图片文件 |
是否可变色 | ✅ | ❌(默认) |
清晰度 | 无限缩放 | 取决于图片 |
适合场景 | 操作图标 | 内容展示 |
📌 经验法则:
能用 Icon,就不要用图片
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
),
child: Image.asset('assets/images/avatar.png'),
)
👉 圆角不会生效!
ClipRRect(
borderRadius: BorderRadius.circular(8),
child: Image.asset(
'assets/images/avatar.png',
width: 80,
height: 80,
fit: BoxFit.cover,
),
)
📌 记住:图片圆角靠裁剪,不靠 Container
Row(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(24),
child: Image.asset(
'assets/images/avatar.png',
width: 48,
height: 48,
fit: BoxFit.cover,
),
),
SizedBox(width: 12),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'用户名',
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(
'这是用户简介',
style: TextStyle(color: Colors.grey),
),
],
),
],
)
这是 几乎所有 App 都会用到的结构。
📌 建议:
❌ pubspec.yaml 缩进错误 ❌ 忘记 flutter pub get ❌ 图片路径拼错 ❌ 用 Image 当 Icon
你已经掌握了:
现在你的页面已经:
有图、有结构、有层次
本篇你学会了:
《Flutter 零基础入门(二十四):Button 按钮体系(TextButton / ElevatedButton / IconButton)》
下一篇我们将学习:
从下一篇开始:
你的 App 将真正“可以点了” 👆