flutter 页面 生命周期,APP应用的生命周期

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); //销毁观察者
  }
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值