📘Flutter 零基础入门(六):Map 键值对与简单数据模型
在上一篇中,我们学习了 List:
- 用来存储一组数据
- 常配合循环进行遍历
- 是 Flutter 列表 UI 的基础
但很快你会发现一个问题:
List 只能存“值”,
却无法清晰地表达“这是什么数据”
例如:
['Tom', 18, true]
这三个值分别代表什么?
- 名字?
- 年龄?
- 是否登录?
仅靠 List,很难看懂。
这时,我们就需要 Map。
一、什么是 Map?
Map 可以理解为:
一组「键 - 值(key - value)」的数据
每一份数据都有:
- 一个 key(名字)
- 一个 value(值)
就像一张信息表:
| key | value |
|---|---|
| name | Tom |
| age | 18 |
| isVip | true |
二、Map 的基本定义方式
1️⃣ 定义一个 Map
Map user = {
'name': 'Tom',
'age': 18,
'isVip': true
};
含义非常直观:
name对应名字age对应年龄isVip对应状态
2️⃣ 指定 key 和 value 类型(推荐)
Map<String, dynamic> user = {
'name': 'Tom',
'age': 18,
'isVip': true
};
解释:
- key 是
String - value 可以是任意类型(dynamic)
📌 这是 Flutter 项目中最常见的写法
三、访问 Map 中的数据
通过 key 来访问 value:
print(user['name']); // Tom
print(user['age']); // 18
📌 注意:
- key 不存在时,返回
null - Map 没有“索引”的概念
四、修改和操作 Map
1️⃣ 修改已有数据
user['age'] = 20;
2️⃣ 新增一条数据
user['city'] = 'Beijing';
3️⃣ 删除数据
user.remove('isVip');
五、为什么 Map 经常和 List 一起使用?
在真实业务中,常见的数据结构是:
List
例如:
- 用户列表
- 商品列表
- 消息列表
示例:用户列表
List<Map<String, dynamic>> users = [
{
'name': 'Tom',
'age': 18,
},
{
'name': 'Lucy',
'age': 20,
}
];
这里表示:
- 一个用户列表(List)
- 每个用户是一条 Map
六、遍历 List + Map(真实开发写法)
for (var user in users) {
print('姓名:${user['name']},年龄:${user['age']}');
}
📌 你会发现:
- List 决定“有多少条数据”
- Map 决定“每条数据有什么字段”
七、Map 就是“简单数据模型”
在 Flutter 项目中,Map 通常用于:
- 模拟接口返回的数据
- 临时存储一条业务数据
- 构建简单数据模型
例如:
Map product = {
'title': 'iPhone',
'price': 5999,
'inStock': true
};
这已经非常接近真实项目中的数据结构了。
八、一个综合示例
List<Map<String, dynamic>> products = [
{'name': 'iPhone', 'price': 5999},
{'name': 'iPad', 'price': 3999},
];
for (var product in products) {
print('${product['name']} 的价格是 ¥${product['price']}');
}
这个例子用到了:
- List
- Map
- 循环
- 字符串插值
九、Map 在 Flutter UI 中的意义
在 Flutter 中:
- 页面展示的数据通常来自 Map
- 接口返回的数据几乎都是 Map / JSON
- Map 是学习 Model 类 的前置知识
📌 后续你会学到:
如何把 Map 变成真正的 Dart 类
十、总结
本篇你已经学会了:
- 什么是 Map
- Map 与 List 的区别
- List + Map 的组合使用
- 使用 Map 描述一条完整数据
你已经完成了从:
“零散数据” → “结构化数据” 的重要跃迁
🔜 下一篇预告
《Flutter 零基础入门(七):函数(Function)与代码封装》
下一篇我们将学习:
- 什么是函数
- 如何封装重复逻辑
- 函数的参数与返回值
- 为后续 Widget 抽离逻辑做准备
从下一篇开始,你将真正学会:
写“可复用”的代码