云起工作室 15711107967
06_状态管理
2025-02-06 10:44:03

无状态组件 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())