1.页面生命周期
StatelessWidget只有createElement和build的生命周期
StatefulWidget:
初始化周期:
createState,initState
更新期间:
didChangeDependencies,build, didUpdateWidget
销毁期:
deactivate,dispose
import 'package:flutter/material.dart';
class Life extends StatefulWidget {
@override
_LifeState createState() => _LifeState();
}
class _LifeState extends State<Life> {
String _text = "生命周期";
//修改文案
void _reviseText(String content) {
setState(() {
_text = content;
});
}
//这是创建Widget的除了构造函数的另外一个方法,一般用于初始化数据,比如Channel的初始化和监听器的初始化等
@override
void initState() {
print("------initState------");
super.initState();
}
//当依赖的State改变时候调用:
//1.在initState()之后会调用一次
//2.当前State依赖于InheritedWidget,那InheritedWidget的变量改变时候会调用
@override
void didChangeDependencies() {
print("------didChangeDependencies------");
super.didChangeDependencies();
}
//不常用,父组件重绘制时候会调用
//可以比较旧的Widget和当前的
//oldWidget.xxx!=widget.xxx
@override
void didUpdateWidget(Life oldWidget) {
print("------didUpdateWidget------");
super.didUpdateWidget(oldWidget);
}
//不常用,组件被移除调用,在dispose之前
@override
void deactivate() {
print("------deactivate------");
super.deactivate();
}
//销毁调用
//一般用于监听器的卸载,Channel的销毁等
@override
void dispose() {
print("------dispose------");
super.dispose();
}
//1.didChangeDependencies之后会调用一次
//2.setState之后会调用
@override
Widget build(BuildContext context) {
print("------build------");
return Scaffold(
appBar: AppBar(
title: Text("页面生命周期"),
),
body: Center(
child: Column(children: <Widget>[
Text("生命周期"),
RaisedButton(
child: Text("修改文案"),
onPressed: ()=>_reviseText("文案"),
)
],),
),
);
}
}
点击修改按钮,setState修改状态 ,多点一次,共两次Build
离开页面,进行销毁
2.App应用的生命周期
import 'package:flutter/material.dart';
class AppLife extends StatefulWidget {
@override
_AppLifeState createState() => _AppLifeState();
}
class _AppLifeState extends State<AppLife> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this); //添加观察者
}
///生命周期变化时回调
// resumed:应用可见并可响应用户操作,app进入前台
// inactive:用户可见,但不可响应用户操作,比如来了个电话,前后台切换的过渡状态
// paused:已经暂停了,用户不可见、不可操作,app进入后台
// suspending:应用被挂起,此状态IOS永远不会回调
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
print("didChangeAppLifecycleState: $state");
}
///当前系统改变了一些访问性活动的回调
@override
void didChangeAccessibilityFeatures() {
super.didChangeAccessibilityFeatures();
print("didChangeAccessibilityFeatures");
}
///低内存回调
@override
void didHaveMemoryPressure() {
super.didHaveMemoryPressure();
print("didHaveMemoryPressure");
}
///用户本地设置变化时调用,如系统语言改变
@override
void didChangeLocales(List<Locale> locale) {
super.didChangeLocales(locale);
print("didChangeLocales");
}
///应用尺寸改变时回调,例如旋转
@override
void didChangeMetrics() {
super.didChangeMetrics();
Size size = WidgetsBinding.instance.window.physicalSize;
print("didChangeMetrics :宽:${size.width} 高:${size.height}");
}
/// {@macro on_platform_brightness_change}
@override
void didChangePlatformBrightness() {
super.didChangePlatformBrightness();
print("didChangePlatformBrightness");
}
///文字系数变化
@override
void didChangeTextScaleFactor() {
super.didChangeTextScaleFactor();
print(
"didChangeTextScaleFactor :${WidgetsBinding.instance.window.textScaleFactor}");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("App生命周期"),),
body: Column(children: <Widget>[],),
);
}
@override
void dispose() {
super.dispose();
WidgetsBinding.instance.removeObserver(this); //销毁观察者
}
}