首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(十二):枚举(enum)与状态管理的第一步

Flutter 零基础入门(十二):枚举(enum)与状态管理的第一步

作者头像
LarryLan
发布2026-01-16 11:14:15
发布2026-01-16 11:14:15
580
举报

Flutter&Dart零基础入门教程(一)

...

Flutter 零基础入门(十):final、const 与不可变数据

在前面的学习中,我们已经解决了一个非常重要的问题:

👉 如何安全地表示“有没有值”(Null Safety)

但在真实开发中,还有另一类更常见的问题:

·当前是加载中?

·加载成功了?

·还是加载失败?

·页面现在处于哪种状态?

如果你用 String 或 int 来表示这些状态,代码会非常混乱、也非常不安全。

这一篇,我们来学习一个专门为“状态”而生的工具: 👉 枚举(enum)


一、为什么需要枚举(enum)?

先来看一个“新手常见写法”:

代码语言:javascript
复制
String status ='loading';
if (status =='loading') {}
if (status =='success') {}
if (status =='error') {}

问题在哪里?

·字符串容易拼错

·没有提示

·没有约束

·编译器无法帮你发现错误

📌 Dart 无法阻止你写出:

代码语言:javascript
复制
status = 'loadding'; // ❌ 逻辑错误,但不会报错

二、枚举(enum)是什么?

枚举 = 一组有限、固定的取值

比如:

·状态只能是「加载中 / 成功 / 失败」

·性别只能是「男 / 女」

·主题只能是「浅色 / 深色」

👉 这正是 enum 的用武之地。


三、enum 的基本定义

代码语言:javascript
复制
enum PageState {
  loading,
  success,
  error,
}

这里的含义是:

·PageState 是一个新类型

·它的取值 只能 是这三个之一


四、使用 enum 变量

代码语言:javascript
复制
PageState state = PageState.loading;

注意:

·不能随便赋值

·不能写成字符串

·编译器会自动提示可选项


五、enum + if 判断

代码语言:javascript
复制
if (state == PageState.loading) {
  print('加载中...');
} else if (state == PageState.success) {
  print('加载成功');
} else {
  print('加载失败');
}

📌 对比 String 写法:

·更安全

·不可能写错

·IDE 自动补全


六、为什么 enum 非常适合“状态管理”?

在 Flutter 中,页面本质上就是状态的不同表现

·loading → 显示 loading

·success → 显示内容

·error → 显示错误页

而 enum:

·天然适合描述“状态”

·状态是有限的

·状态是可穷举的


七、一个真实场景示例(非 UI)

代码语言:javascript
复制
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 更优雅

代码语言:javascript
复制
switch (state) {
  case PageState.loading:
    print('加载中');
    break;
  case PageState.success:
    print('成功');
    break;
  case PageState.error:
    print('失败');
    break;
}

优势:

·所有状态一目了然

·漏写会被编译器提示

·更适合状态逻辑


九、enum 是如何“帮你减少 Bug 的”?

假设你后来新增了一个状态:

代码语言:javascript
复制
enum PageState {
  loading,
  success,
  empty,
  error,
}

如果你忘了在 switch 中处理 empty:

👉 编译器会警告你

这在大型项目中非常重要。


十、enum vs int / String 对比总结

方式

是否安全

是否可控

是否推荐

String

不推荐

int

不推荐

enum

强烈推荐

📌 一句话结论:

只要是“有限状态”,优先使用 enum


十一、enum 与 Class 的配合(重要思想)

代码语言:javascript
复制
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 是如何在“安全”和“灵活”之间取得平衡的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flutter&Dart零基础入门教程(一)
  • ...
  • Flutter 零基础入门(十):final、const 与不可变数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档