-
临时状态 与 应用状态
- 原文地址: flutter.dev/docs/develo…
- 临时状态(非通用状态)无需特殊管理, 在 StatefulWidget 的 State 里定义即可
- 应用状态(需要全局共享的状态: 用户设置, 登录信息, 购物车等)
- 没有清晰的规则来界定临时状态和应用状态, 依需求而定
- 数据
- 单个组件应用 -- 临时状态
- 多个组件, 或者大多数组件需要 -- 应用状态
- 数据
- "第一原则": 极简主义, 顺势而为("The rule of thumb is: Do whatever is less awkward.")
- 总结:
- 临时状态 可以通过
State和SetState()实现, 通常是单一组件的局部状态. - 其他的状态就是 应用状态.
- 在 FLutter 应用中, 两者无特殊规则界定, 依据个人设置及应用复杂程度来选择.
- 临时状态 可以通过
-
简单应用状态管理(provider 实践)
- 原文地址: flutter.dev/docs/develo…
- 状态前置(状态上调)
- 组件不改变, 只是被替换
provider相关概念:- ChangeNotifier
- 组件继承自
ChangeNotifier, 在需要更新UI的地方调用notifyListeners()
- 组件继承自
- ChangeNotifierProvider
- 为子组件提供
ChangeNotifier的实例, 在需要获取它的组件的父组件中定义 ChangeNotifierProvider应该被定义在必要的地方, 不能高于必要的父组件- 可以通过
MultiProvider定义多个 provider
- 为子组件提供
- Consumer
- 通过
Consumer<>组件的builder: (context, cart, child){}方法来更新UI - 每次调用
notifyListeners(), 所有对应Consumer组件的builder方法都会被调用 Consumer组件应该尽量在底层调用, 以避免不必要的UI更新
- 通过
- Provider.of
- 在不需要更新UI的时候, 可以通过
Provider.of<>(context, listen: false).method();实现组件方法调用
- 在不需要更新UI的时候, 可以通过
- github: github.com/flutter/sam…
- provider 文档: pub.dev/documentati…
- ChangeNotifier
状态管理方式: flutter.dev/docs/develo…
Flutter Providers 解析: medium.com/flutter-com…
基于
Provider的 Flutter 架构: www.filledstacks.com/post/flutte…