无状态组件 StatelessWidget
有状态组件 StatefulWidget
void main(){
runApp(StateManage());
}
class StateManage extends StatefulWidget{
@override
State<StatefulWidget> createState(){
return _SMDState();
}
}
状态管理
class _SMDState extends State<StateManage>{
int count = 0;
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text("app bar title"),
),
body: Center(
child: Chip(
label:Text("$count")
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: (){
setState(() { //更新状态
count++;
});
},
),
),
);
}
}
用widget. 来访问 StatefulWidget 中的成员
class StateManage extends StatefulWidget{
final String title;
final String name;
StateManage({
@required this.title, //@required 是必传的意思
this.name
}) : assert(title!=null,"title不能为空")
@override
State<StatefulWidget> createState(){
return _SMDState();
}
}
状态管理
class _SMDState extends State<StateManage>{
@override
Widget build(BuildContext context) {
return Text(widget.title); //通过widget. 可以使用传过来的参数
}
}
class MyData extends InheritedWidget{
final int data;
const MyData({required this.data,require Widget child}):super(child:child);
//定义一个便捷方法,方便子组件中得widget去获取共享得数据 ?是空安全
static MyData? of(BuildContext context){
return context.dependOnInheritedWidgetOfExactType();
}
bool updateShouldNotify(MyData oldWidget){
return oldWidget.data!=data;
}
}
使用
Text(MyData.of(context)!.data.toString())