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

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

文章目录

  • [Flutter 零基础入门(十二):枚举(enum)与状态管理的第一步](#Flutter 零基础入门(十二):枚举(enum)与状态管理的第一步)
    • 一、为什么需要枚举(enum)?
    • 二、枚举(enum)是什么?
    • [三、enum 的基本定义](#三、enum 的基本定义)
    • [四、使用 enum 变量](#四、使用 enum 变量)
    • [五、enum + if 判断](#五、enum + if 判断)
    • [六、为什么 enum 非常适合"状态管理"?](#六、为什么 enum 非常适合“状态管理”?)
    • [七、一个真实场景示例(非 UI)](#七、一个真实场景示例(非 UI))
    • [八、enum 与 switch(推荐写法)](#八、enum 与 switch(推荐写法))
    • [九、enum 是如何"帮你减少 Bug 的"?](#九、enum 是如何“帮你减少 Bug 的”?)
    • [十、enum vs int / String 对比总结](#十、enum vs int / String 对比总结)
    • [十一、enum 与 Class 的配合(重要思想)](#十一、enum 与 Class 的配合(重要思想))
    • 十二、这一篇你真正学到的是什么?
    • 十三、总结
    • [🔜 下一篇预告](#🔜 下一篇预告)

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

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

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

  • 当前是加载中?
  • 加载成功了?
  • 还是加载失败?
  • 页面现在处于哪种状态?

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

这一篇,我们来学习一个专门为"状态"而生的工具

👉 枚举(enum)


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

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

dart 复制代码
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 是如何在"安全"和"灵活"之间取得平衡的

相关推荐
Helen_cai18 小时前
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构)
开发语言·华为·php·harmonyos
大圣编程1 天前
Java 多维数组详解
java·开发语言
DianSan_ERP1 天前
电商架构演进:如何在高并发场景下实现多平台API的标准化履约?
运维·前端·网络·安全·架构·自动化
殳翰1 天前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
落寞的星星1 天前
这个对象就包含了已经转换好的DFA和各种词法分析器运转所需要的参数。下一步,我们就可以用ScannerInfo对象创建出Scanner对象,请看下面的代码:
开发语言·c#
nothing&nowhere1 天前
用 Python 做问卷数据清洗:无效样本检测与处理实战
开发语言·python·数据清洗·数据处理·问卷星·问卷星脚本·刷问卷
2601_961593421 天前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
HZZD_HZZD1 天前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
ZZZMMM.zip1 天前
基于鸿蒙HarmonyOS NEXT开发AI股票分析应用:智能投资新体验与鸿蒙Flutter框架跨端实践
人工智能·flutter·华为·harmonyos·鸿蒙
碎_浪1 天前
给键盘党的英语记忆工具:我做了一款「打字背单词」桌面应用
前端·程序员·ai编程