Flutter —— 生命周期
1. 生命周期
一个对象从创建到销毁所经历的过程就是一个生命周期,说白了就是回调方法。在Flutter中已经封装好了,知道widget处于什么样的状态了,然后给你一个对应状态的回调,所以说生命周期其实是一系列的回调方法。
那么生命周期有什么作用呢?
- 初始化数据
- 创建变量,常量
- 发送网络请求
- 监听小部件的事件
- 管理内存
- 销毁数据,销毁监听者
- 销毁timer等等
2. Widget的生命周期
Widget主要分两种,StatelessWidget 和 StatefulWidget。这里先分析StatelessWidget的生命周期
2.1 StatelessWidget常见的生命周期
新建一个项目,然后在MyApp里面将home里面的widget改成Scaffold。
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(),
body: MyHomePage(title: 'Flutter Demo Page 2',),
),
);
}
}
然后将MyHomePage改成StatelessWidget,这里title是可选参数且允许为空,那么在使用的时候可以使用!
强制解包,或者使用??
来让title为空的时候使用右边的值,那么这里不传title的话那么Text里面就会显示的是123。
class MyHomePage extends StatelessWidget {
final String? title;
MyHomePage({this.title});
@override
Widget build(BuildContext context) {
return Center(child: Text(title ?? "123"),);
}
}
然后在构造函数以及build函数里面添加打印,然后根据打印来看调用的顺序和时机。
class MyHomePage extends StatelessWidget {
final String? title;
MyHomePage({this.title}){
print('构造函数被调用了');
}
@override
Widget build(BuildContext context) {
print('build函数被调用了');
return Center(child: Text(title ?? "123"),);
}
}
这里android studio 运行的话会有小小的问题就是打印两次,用xcode运行就不会有这个问题了。这里可以看到构造函数是在build函数之前被调用的。