- StatelessWidget : 不可变,比例一旦定义了宽高,一旦定义就不可改变
- StatefulWidget :==需要两个类去管理==
- 描述UI
- 记录状态的State (w,h)不销毁,界面消失才会被干掉 : State属性改变时会根据宽高重新渲染UI
1.StatelessWidget(界面本身不发生变化)
UI 界面一旦创建就不会发生变化,定义属性值可以变化,但不会重新渲染UI,
所有的界面都是不可变的(无状态的)
//Chip 悬浮小图标
class StateManagerDemo extends StatelessWidget {
int count = 0;//提示你去用final 修饰
void func(){
count += 1;
print('count = $count');
/*
输出结果
flutter: count = 1
flutter: count = 2
flutter: count = 3
flutter: count = 4
flutter: count = 5
*/
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("StateManagerDemo"),
),
body: Center(
child: Chip(label: Text('$count')),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: func,
),
);
}
}
2.StatefulWidget(界面本身发生变化)
- State发生变化时会重新渲染UI,类似于Hot Reload
-
更新/刷新操作:
setState(() {});
-
createState
此方法返回状态管理类,进行关联
所有的界面都是不可变的(无状态的)
//RXDart
//1.定义UI类
class StateManagerDemo extends StatefulWidget {
//构造方法-初始化数据,传参数
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _SMDState();
}
}
//2.定义状态管理类
class _SMDState extends State<StateManagerDemo> {
//状态->>管理数据
int count = 0;
void func(){
count += 1;
setState(() {});//重新刷新
print('count = $count');
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("StateManagerDemo"),
),
body: Center(
child: Chip(label: Text('$count')),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: func,
),
);
}
}
效果图
image