javaee论坛

普通会员

225648

帖子

342

回复

356

积分

楼主
发表于 2019-10-30 17:46:45 | 查看: 449 | 回复: 1

Widget与Element

Widget其实并不是表示最终绘制在设备屏幕上的显示元素,而它只是描述显示元素的一个配置数据。

StatelessWidget

StatelessWidget用于不需要维护状态的场景,它通常在build方法中通过嵌套其它Widget来构建UI,在构建过程中会递归的构建其嵌套的Widget。

Context

build方法有一个context参数,它是BuildContext类的一个实例,表示当前widget在widget树中的上下文,每一个widget都会对应一个context对象(因为每一个widget都是widget树上的一个节点)。实际上,context是当前widget在widget树中位置中执行”相关操作“的一个句柄,比如它提供了从当前widget开始向上遍历widget树以及按照widget类型查找父级widget的方法。

classContextRouteextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text("Context测试"),),body:Container(child:Builder(builder:(context){//在Widget树中向上查找最近的父级`Scaffold`widgetScaffoldscaffold=context.ancestorWidgetOfExactType(Scaffold);//直接返回AppBar的title,此处实际上是Text("Context测试")return(scaffold.appBarasAppBar).title;}),),);}}StatefulWidget

State

一个StatefulWidget类会对应一个State类,State表示与其对应的StatefulWidget要维护的状态,State中的保存的状态信息可以:

在widget构建时可以被同步读取。在widget生命周期中可以被改变,当State被改变时,可以手动调用其setState()方法通知Flutterframework状态发生改变,Flutterframework在收到消息后,会重新调用其build方法重新构建widget树,从而达到更新UI的目的。

State生命周期

classCounterWidgetextendsStatefulWidget{constCounterWidget({Keykey,this.initValue:0});finalintinitValue;@override_CounterWidgetStatecreateState()=>new_CounterWidgetState();}class_CounterWidgetStateextendsState<CounterWidget>{int_counter;@overridevoidinitState(){super.initState();//初始化状态_counter=widget.initValue;print("initState");}@overrideWidgetbuild(BuildContextcontext){print("build");returnScaffold(body:Center(child:FlatButton(child:Text('$_counter'),//点击后计数器自增onPressed:()=>setState(()=>++_counter,),),),);}@overridevoiddidUpdateWidget(CounterWidgetoldWidget){super.didUpdateWidget(oldWidget);print("didUpdateWidget");}@overridevoiddeactivate(){super.deactivate();print("deactive");}@overridevoiddispose(){super.dispose();print("dispose");}@overridevoidreassemble(){super.reassemble();print("reassemble");}@overridevoiddidChangeDependencies(){super.didChangeDependencies();print("didChangeDependencies");}}

 


普通会员

0

帖子

304

回复

309

积分
沙发
发表于 2023-12-28 20:37:19

围观

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017