当前位置:   article > 正文

Flutter Widget:State 状态管理

Flutter Widget:State 状态管理

响应式的编程框架永恒的主题——“状态(State)管理”

无论是在 React/Vue/Flutter 中讨论的问题和解决的思想都是一致的。

StatefulWidget的状态应该被谁管理?Widget本身?父 Widget ?都会?还是另一个对象?

下面是官方给出的一些原则:

  • 如果状态是用户数据如复选框的选中状态、滑块的位置,则最好由父 Widget 管理。
  • 如果状态是有关界面外观效果如颜色、动画,最好由 Widget 本身来管理。
  • 如果状态是不同 Widget 共享的,最好由它们共同的父 Widget 管理。

以下是管理状态的最常见的方法:

  • Widget 管理自身的状态。
  • Widget 管理子 Widget 状态。
  • 混合管理(父 Widget 和子 Widget 都管理状态)。

接下来,我们将通过例子说明管理状态的不同方式:创建一个盒子,当点击它时,盒子背景会在绿色与灰色之间切换。状态 _active确定颜色:绿色为true ,灰色为false。如图所示:


Widget管理自身状态

我们实现一个TapboxA,对应的状态类_TapboxAState :

  1. class TapboxA extends StatefulWidget {
  2. TapboxA({Key? key}) : super(key: key);
  3. @override
  4. _TapboxAState createState() => _TapboxAState();
  5. }
  6. class _TapboxAState extends State<TapboxA> {
  7. bool _active = false;//确定盒子的当前颜色的布尔值。
  8. void _handleTap() {//更新_active,并调用setState()更新UI。
  9. setState(() { _active = !_active;});
  10. }
  11. Widget build(BuildContext context) {
  12. return GestureDetector(
  13. onTap: _handleTap,
  14. child: Container(
  15. child: Center(
  16. child: Text(
  17. _active ? 'Active' : 'Inactive',
  18. style: TextStyle(fontSize: 32.0, color: Colors.white),
  19. ), ),
  20. width: 200.0,height: 200.0,
  21. decoration: BoxDecoration(color: _active ? Colors.lightGreen[700] : Colors.grey[600],),
  22. ),);
  23. }
  24. }

Widget管理子widget状态

父Widget管理状态并告诉其子Widget何时更新。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/307620
推荐阅读
相关标签