在 Flutter 里面部件以及应用本身都有自己的生命周期,本文分别说明它们的生命周期
前言
在 Flutter 里面部件以及应用本身都有自己的生命周期,本文分别说明它们的生命周期
部件
在 Flutter 里面有两种部件 StatefulWidget 和 StatelessWidget,它们的生命周期分别是
无状态部件的生命周期很简单,首先执行构造函数然后就执行 build 方法了
1 2 3
| Constructor Function
build()
|
有状态部件的生命周期会复杂一些,因为是多了状态变化。首先是构造函数,然后会初始化 State 在执行 build 方法,如果执行了 setState 方法,就要检查部件是否更新,在执行 build,最后部件销毁的时候执行 dispose 方法
1 2 3 4 5 6 7 8 9 10 11 12 13
| Constructor Function
initState()
build()
setState()
didUpdateWidget()
build()
dispose()
|
应用
Flutter 应用本身也有自己的生命周期,要观察到这些状态的变化需要让一个有状态部件混入 WidgetsBindingObserver
,然后在 initState
方法中创建一个观察者,当然部件销毁的时候需要把创建的观察者实现清除
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Lifecycle', home: MyHomePage(), ); } }
class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); }
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver { @override void initState() { WidgetsBinding.instance.addObserver(this); super.initState(); }
@override void didChangeAppLifecycleState(AppLifecycleState state) { print(state); }
@override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); }
@override Widget build(BuildContext context) { return Scaffold(); } }
|
可以看到在 Flutter 应用里面这些生命周期还是挺简单易懂的