赞
踩
无论是在 React/Vue/Flutter 中讨论的问题和解决的思想都是一致的。
StatefulWidget
的状态应该被谁管理?Widget本身?父 Widget ?都会?还是另一个对象?
下面是官方给出的一些原则:
以下是管理状态的最常见的方法:
接下来,我们将通过例子说明管理状态的不同方式:创建一个盒子,当点击它时,盒子背景会在绿色与灰色之间切换。状态 _active
确定颜色:绿色为true
,灰色为false
。如图所示:
我们实现一个TapboxA,对应的状态类_TapboxAState :
- class TapboxA extends StatefulWidget {
- TapboxA({Key? key}) : super(key: key);
- @override
- _TapboxAState createState() => _TapboxAState();
- }
- class _TapboxAState extends State<TapboxA> {
- bool _active = false;//确定盒子的当前颜色的布尔值。
- void _handleTap() {//更新_active,并调用setState()更新UI。
- setState(() { _active = !_active;});
- }
- Widget build(BuildContext context) {
- return GestureDetector(
- onTap: _handleTap,
- child: Container(
- child: Center(
- child: Text(
- _active ? 'Active' : 'Inactive',
- style: TextStyle(fontSize: 32.0, color: Colors.white),
- ), ),
- width: 200.0,height: 200.0,
- decoration: BoxDecoration(color: _active ? Colors.lightGreen[700] : Colors.grey[600],),
- ),);
- }
- }
父Widget管理状态并告诉其子Widget何时更新。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。