赞
踩
Flutter中的Widget负责的功能都相对比较单一。
import 'package:flutter/cupertino.dart'; class DemoWidget extends StatefulWidget { late final String text; DemoWidget(this.text); @override State<StatefulWidget> createState() => _DemoWidgetState(text); } class _DemoWidgetState extends State<DemoWidget> { late String text; _DemoWidgetState(this.text); /// 初始化 /// 理论上只会调用一次 @override void initState() { super.initState(); print("initState()"); } /// 在initState之后调用 /// 该方法当父容器发生变化时可能会被调用 @override void didChangeDependencies() { super.didChangeDependencies(); print("didChangeDependencies()"); Future.delayed(Duration(seconds: 1), () { setState(() { text = "卧槽"; }); }); } /// 销毁 /// 只会调用一次 @override void dispose() { super.dispose(); print("dispose()"); } @override Widget build(BuildContext context) { print("build()"); return Center( child: Container( child: Text(text), ), ); } } // initState() // didChangeDependencies() // build() // dispose()
名称 | 状态说明 |
---|---|
initState | 渲染时调用,只会调用一次,可以做一些初始化操作。 |
didChangeDependencies | state依赖的对象发生变化时盗用。 |
didUpdateWidget | Widget状态改变时调用,可能会调用多次。 |
build | 构建Widget时调用。 |
deactivate | 当移除渲染树时调用。 |
dispose | Widget即将销毁时调用。 |
当Widget被加载时,首先会创建出Widget对应的Element对象,然后Element读取Widget的配置信息(尺寸、位置、文本等),转化为RenderObject对象,RenderObject才是真正上的控件对象,最终插入RenderObject树中实现绘制。
Element会保持一些配置信息,同时Widget的加载、生命周期和更新等流程,RenderObject的创建、更新等时机,child的加载、更新等行为,都是通过Element实现或执行的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。