一荷逞、概述
生命周期是一個從創(chuàng)建到銷毀的過程媒咳,F(xiàn)lutter生命周期分為兩部分:
1.Widget的生命周期
2.APP的生命周期
二、Widget的生命周期
1.StatelessWidget
對于StatelessWidget來說种远,生命周期只有build過程涩澡。build是用來創(chuàng)建Widget的,在每次頁面刷新時會調(diào)用build坠敷。
2.StatefulWidget
StatefulWidget的生命周期依次為:
- createState
- initState
- didChangeDependencies
- build
- addPostFrameCallback
- didUpdateWidget
- deactivate
- dispose
createState
createState是StatefulWidget來創(chuàng)建State的方法妙同,只調(diào)用一次,
class PdfIntroduce extends StatefulWidget {
@override
_PdfIntroduce createState() => _PdfIntroduce();
}
initState
initState是StatefulWidget創(chuàng)建后調(diào)用的第一個方法膝迎,而且只執(zhí)行一次粥帚。在執(zhí)行initState時,View沒有渲染限次,但是StatefulWidget 已經(jīng)被加載到渲染樹里了芒涡,這事的StatefulWidget的mount的值會變?yōu)閠rue,知道dispose才會變?yōu)閒alse.一般我們把初始化的一些操作都放在initState中卖漫。
@override
void initState() {
super.initState();
...
}
didChangeDependencies
didChangeDependencies會在initState后立即調(diào)用费尽,之后只有當(dāng)StatefulWidget依賴的InheritedWidget發(fā)生變化之后,didChangeDependencies才會調(diào)用羊始,所以didChangeDependencies可以調(diào)用多次旱幼。
build
build方法會在didChangeDeoendencies之后立即調(diào)用,在之后setState()刷新時店枣,會重新調(diào)用build繪制頁面速警,所以build方法可以調(diào)用多次。但一般不再build中創(chuàng)建除創(chuàng)建Widget的方法鸯两,否則會影響渲染效率闷旧。
class PdfIntroduce extends StatefulWidget {
@override
_PdfIntroduce createState() => _PdfIntroduce();
}
addPostFrameCallback
addPostFrameCallback是StatefulWidget渲染結(jié)束之后的回調(diào),只會調(diào)用一次钧唐,一般是在initState里添加回調(diào):忙灼,
import 'package:flutter/scheduler.dart';
@override
void initState() {
super.initState();
SchedulerBinding.instance.addPostFrameCallback((_) => {});
}
didUpdateWidget
deactivate(組件移除時)
dispose(組件移除時)
一般在dispose中做一些取消監(jiān)聽、動畫的操作钝侠,和initState相對使用该园。
@override
void dispose() {
super.dispose();
_controller.dispose();
}
三、APP的生命周期
AppLifecycleState就是App的生命周期帅韧,包含四個:
- resumed
- inactive
- paused
- suspending