在前面的学习中,我们已经解决了一个非常重要的问题:
👉 如何安全地表示“有没有值”(Null Safety)
但在真实开发中,还有另一类更常见的问题:
·当前是加载中?
·加载成功了?
·还是加载失败?
·页面现在处于哪种状态?
如果你用 String 或 int 来表示这些状态,代码会非常混乱、也非常不安全。
这一篇,我们来学习一个专门为“状态”而生的工具: 👉 枚举(enum)
一、为什么需要枚举(enum)?
先来看一个“新手常见写法”:
String status ='loading';
if (status =='loading') {}
if (status =='success') {}
if (status =='error') {}问题在哪里?
·字符串容易拼错
·没有提示
·没有约束
·编译器无法帮你发现错误
📌 Dart 无法阻止你写出:
status = 'loadding'; // ❌ 逻辑错误,但不会报错二、枚举(enum)是什么?
枚举 = 一组有限、固定的取值
比如:
·状态只能是「加载中 / 成功 / 失败」
·性别只能是「男 / 女」
·主题只能是「浅色 / 深色」
👉 这正是 enum 的用武之地。
三、enum 的基本定义
enum PageState {
loading,
success,
error,
}这里的含义是:
·PageState 是一个新类型
·它的取值 只能 是这三个之一
四、使用 enum 变量
PageState state = PageState.loading;注意:
·不能随便赋值
·不能写成字符串
·编译器会自动提示可选项

五、enum + if 判断
if (state == PageState.loading) {
print('加载中...');
} else if (state == PageState.success) {
print('加载成功');
} else {
print('加载失败');
}📌 对比 String 写法:
·更安全
·不可能写错
·IDE 自动补全

六、为什么 enum 非常适合“状态管理”?
在 Flutter 中,页面本质上就是状态的不同表现:
·loading → 显示 loading
·success → 显示内容
·error → 显示错误页
而 enum:
·天然适合描述“状态”
·状态是有限的
·状态是可穷举的
七、一个真实场景示例(非 UI)
enum LoadState {
idle,
loading,
success,
error,
}
void handleState(LoadState state) {
if (state == LoadState.idle) {
print('初始状态');
} else if (state == LoadState.loading) {
print('请求中');
} else if (state == LoadState.success) {
print('请求成功');
} else {
print('请求失败');
}
}📌 这已经是 Flutter 状态管理的雏形
八、enum 与 switch(推荐写法)
当你用 enum 判断时,switch 比 if 更优雅:
switch (state) {
case PageState.loading:
print('加载中');
break;
case PageState.success:
print('成功');
break;
case PageState.error:
print('失败');
break;
}优势:
·所有状态一目了然
·漏写会被编译器提示
·更适合状态逻辑
九、enum 是如何“帮你减少 Bug 的”?
假设你后来新增了一个状态:
enum PageState {
loading,
success,
empty,
error,
}如果你忘了在 switch 中处理 empty:
👉 编译器会警告你
这在大型项目中非常重要。
十、enum vs int / String 对比总结
方式 | 是否安全 | 是否可控 | 是否推荐 |
|---|---|---|---|
String | ❌ | ❌ | 不推荐 |
int | ❌ | ❌ | 不推荐 |
enum | ✅ | ✅ | 强烈推荐 |
📌 一句话结论:
只要是“有限状态”,优先使用 enum
十一、enum 与 Class 的配合(重要思想)
enum UserType {
normal,
vip,
admin,
}
class User {
final String name;
final UserType type;
User(this.name, this.type);
}现在:
·用户类型不再混乱
·数据模型更加严谨
·逻辑更清晰
十二、这一篇你真正学到的是什么?
你不仅学了 enum 语法,更重要的是:
·学会了用类型表达业务含义
·开始用“状态”思维写代码
·为 Flutter 的 UI 切换打基础
📌 这是从“写代码”到“设计代码”的转变。

十三、总结
本篇你已经掌握:
·enum 的定义与使用
·enum 与 if / switch
·enum 在状态管理中的作用
·为什么 enum 是 Flutter 的必备工具

🔜 下一篇预告
《Flutter 零基础入门(十三):late 关键字与延迟初始化》
下一篇我们将学习:
·late 是为了解决什么问题
·late 与 final 的关系
·常见使用场景
·Flutter 中为什么大量使用 late
你将进一步理解:
Dart 是如何在“安全”和“灵活”之间取得平衡的