记录一下flutter中【StatefulWidget】的生命周期学习内容,核心分为一下三组
1. 初始化时期 createState 和 initState
2. 更新时期 didChangeDependencies 、build 、didUpdateWidget
3. 销毁时期 deactivate 和 dispose
import 'package:flutter/material.dart';
/**
flutter widget的生命周期 重点讲解【StatefulWidget】的生命周期
因为无状态的widget的生命周期方只有 createElement 和 build两个生命周期方法
【StatefulWidget】的生命周期方法按照时期不同可以分为三组
1.初始化时期 createState 和 initState
2.更新时期 didChangeDependencies 、build 、didUpdateWidget
3.销毁时期 deactivate 和 dispose
扩展阅读:
http://www.devio.org/io/flutter_app/img/blog/flutter-widget-lifecycle.png
https://flutterbyexample.com/stateful-widget-lifecycle/
*/
class FlutterWidgetLifeCycle extends StatefulWidget {
///当我们构建一个新的StatefulWidget时,这个会立即调用
///并且这个方法必须被覆盖
@override
_FlutterWidgetLifeCycleState createState() => _FlutterWidgetLifeCycleState();
}
class _FlutterWidgetLifeCycleState extends State<FlutterWidgetLifeCycle> {
int _count = 0;
///这是创建widget时候调用的,除构造方法外的第一个方法
///类似于iOS的viewDidLoad()
///在这个方法中通常会做一些初始化工作,比如channel的初始化,监听器的初始化等
@override
void initState() {
print('-----initState-----');
super.initState();
}
///当以来的State对象改变时会调用
@override
void didChangeDependencies() {
print('------didChangeDependencies-------');
super.didChangeDependencies();
}
///这是一个必须实现的方法,在这里实现你要成仙的页面内容
///它会在 didChangeDependencies 方法之后立即调用;
///另外当调用 setState() 后也会再次调用该build方法;
@override
Widget build(BuildContext context) {
print('------build------');
return Scaffold(
appBar: AppBar(
title: Text('Flutter页面生命周期'),
leading: BackButton(),
),
body: Center(
child: Column(
children: <Widget>[
RaisedButton(
onPressed: () {
setState(() {
_count += 1;
});
},
child: Text(
'点我',
style: TextStyle(fontSize: 20),
),
),
Text(_count.toString()),
],
),
),
);
}
///这是一个不常用到的生命周期方法,当父组件需要重新绘制时才会调用;
@override
void didUpdateWidget(FlutterWidgetLifeCycle oldWidget) {
print('-------didUpdateWidget-----');
super.didUpdateWidget(oldWidget);
}
///很少使用,在组件被移除时候调用,在dispose之前调用
@override
void deactivate() {
print('--------deactivate----------');
super.deactivate();
}
///常用,组件被销毁时候调用;
///通常在该方法中执行一些资源的释放工作,比如监听器的移除,channel的销毁等;
@override
void dispose() {
print('--------dispose---------');
super.dispose();
}
}
控制台输出结果如下:
flutter: -----initState-----
flutter: ------didChangeDependencies-------
flutter: ------build------
flutter: ------build------
flutter: ------build------
flutter: --------deactivate----------
flutter: --------dispose---------
网友评论