广告
返回顶部
首页 > 资讯 > 移动开发 >Flutter组件生命周期和App生命周期示例解析
  • 494
分享到

Flutter组件生命周期和App生命周期示例解析

Flutter组件APP生命周期Flutter生命周期 2022-12-08 20:12:46 494人浏览 八月长安
摘要

目录引言无状态组件(StatelessWidget)有状态组件(StatefulWidget)StatefulWidget生命周期详细分析1. createState2. initS

引言

Flutter开发中,所有的组件和页面都继承自Widget,所以探索页面的生命周期其实就是Widget的生命周期。 在 Flutter 中一切皆 组件,而组件又分为 StatefulWidget(有状态) 和 StatelessWidget(无状态)组件

无状态组件(StatelessWidget)

无状态组件,可以理解为将外部传入的数据转化为界面展示的内容,只会渲染一次。

有状态组件(StatefulWidget)

有状态组件,是定义交互逻辑和业务数据,可以理解为具有动态可交互的内容界面,会根据数据的变化进行多次渲染。

StatefulWidget生命周期详细分析

1. createState

当StatefulWidget被创建时立即执行createState。createState 函数执行完毕后表示当前组件已经在 Widget 树中,此时有一个非常重要的属性mounted设置为true。

2. initState

该函数为 State 初始化调用,只会被调用一次。因此,通常会在该回调中做一些一次性的操作,如执行 State 各变量的初始赋值,获取服务端数据等。

3. didChangeDependencies

该函数是在该组件依赖的 State 发生变化时会被调用。didChangeDependencies 方法调用后,组件的状态变为 dirty,立即调用 build 方法。

4. build

主要是在方法中创建各种组件,绘制到屏幕上,由于 build 会被调用多次,因此在该函数中只能做返回 Widget 相关逻辑,避免因为执行多次而导致状态异常。因此此方法可以在每一帧中调用,此方法中应该只包含构建组件的代码,不应该包含其他额外的功能,尤其是耗时任务。

5. didUpdateWidget

该函数主要是在组件重新构建,比如说热重载,父组件发生 build 的情况下,子组件该方法才会被调用,其次该方法调用之后一定会再调用本组件中的 build 方法。此方法中通常会用当前组件与前组件进行对比。Framework 调用完此方法后,会将组件设置为 dirty 状态,然后调用 build 方法,因此无需在此方法中调用 setState 方法。

6. deactivate

在组件被移除节点后会被调用,在某些情况下,框架将重新插入 State 对象到树的其他位置(例如,如果包含该树的子树 State 对象从树中的一个位置移植到另一位置),框架将会调用 build 方法来提供 State 对象适应其在树中的新位置。

7. dispose

永久移除组件,并释放组件资源。调用完 dispose后,mounted 属性被设置为 false,也代表组件生命周期的结束,此时再调用 setState 方法将会抛出异常。

8. reassemble

主要在开发阶段使用,在 debug 模式下,每次热重载都会调用该函数,因此在 debug 阶段可以在此期间增加一些 debug 代码,来检查代码问题。

App生命周期

App的生命周期的监听,在Flutter中需要通过监听器WidgetsBindinGobserver监听器中的AppLifecycleState方法来是实现。

class AppLifePage extends StatefulWidget {
  CEAppLifePage({Key key}) : super(key: key);
  @override
  _AppLifePageState createState() => _AppLifePageState();
}
//  实现WidgetsBindingObserver观察者
class _AppLifePageState extends State<AppLifePage> with WidgetsBindingObserver{
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this); //添加观察者
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("App生命周期"),),
      body: Text('Flutter App 生命周期'),
    );
  }
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    print("didChangeAppLifecycleState: $state");
    switch (state) {
        case AppLifecycleState.resumed:
          print('应用程序可见且响应用户输入。');
          break;
        case AppLifecycleState.paused:
          print('应用程序不可见且无法响应用户输入,运行在后台。');
          break;
        case AppLifecycleState.inactive: 
          print('应用程序处于非激活状态,无法响应用户输入。'); 
          break;
        case AppLifecycleState.detached: 
          print('应用程序仍寄存在Flutter引擎上,但与平台 View 分离。'); 
          break;
      }
  }
  //  当前系统改变了一些访问性活动的回调
  @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}");
  }
  //  系统切换主题时回调
  @override
  void didChangePlatfORMBrightness() {
    super.didChangePlatformBrightness();
    print("didChangePlatformBrightness");
  }
  //  文字系数变化
  @override
  void didChangeTextScaleFactor() {
    super.didChangeTextScaleFactor();
    print(
        "didChangeTextScaleFactor  :${WidgetsBinding.instance.window.textScaleFactor}");
  }
  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this); //  销毁观察者
  }
}

重点是重写 didChangeAppLifecycleState 方法,AppLifecycleState 中的状态包括:resumed、inactive、paused、detached。

resumed:应用程序可见且响应用户输入。

inactive:应用程序处于非激活状态,无法响应用户输入。在iOS上,打电话、响应TouchID请求、进入应用程序切换器或控制中心都处于此状态。在Android上,分屏应用,打电话,弹出系统对话框或其他窗口等。

pause:应用程序不可见且无法响应用户输入,运行在后台。处于此状态时,引擎将不会调用 Window.onBeginFrame 和 Window.onDrawFrame。

detached:应用程序仍寄存在Flutter引擎上,但与平台 View 分离。处于此状态的时机:引擎首次加载到附加 到一个平台 View的过程中,或者由于执行 Navigator pop ,view 被销毁。

结束语

以上就是Flutter组件生命周期和App生命周期示例解析的详细内容,更多关于Flutter 组件APP生命周期的资料请关注编程网其它相关文章!

--结束END--

本文标题: Flutter组件生命周期和App生命周期示例解析

本文链接: https://www.lsjlt.com/news/174363.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter组件生命周期和App生命周期示例解析
    目录引言无状态组件(StatelessWidget)有状态组件(StatefulWidget)StatefulWidget生命周期详细分析1. createState2. initS...
    99+
    2022-12-08
    Flutter 组件APP生命周期 Flutter 生命周期
  • 微信APP生命周期及页面生命周期示例详解
    目录官方文档小程序的启动流程app生命周期页面的生命周期页面的生命周期(图)官方文档 ogram&jumpbackUrl=%2Fdoc%2F" rel="external n...
    99+
    2022-11-13
  • Blazor组件的生命周期解析
    执行周期 1. SetParametersAsync2. OnInitializedAsync(调用两次) 和 OnInitialized;3. OnParametersSetAsy...
    99+
    2022-11-13
  • Vue组件和Route生命周期的示例分析
    这篇文章主要为大家展示了“Vue组件和Route生命周期的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue组件和Route生命周期的示例分析”这篇文...
    99+
    2022-10-19
  • Vue组件生命周期实例分析
    本文小编为大家详细介绍“Vue组件生命周期实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue组件生命周期实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 组件的生命周期的四个阶段组件的生命周...
    99+
    2023-06-27
  • Vue2.0生命周期的示例分析
    这篇文章主要为大家展示了“Vue2.0生命周期的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue2.0生命周期的示例分析”这篇文章吧。网上已经有很多...
    99+
    2022-10-19
  • vue生命周期的示例分析
    这篇文章主要介绍了vue生命周期的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue生命周期图解感谢你能够认真阅读完这篇文章,希望小编分享的“vue生命周期的示例分...
    99+
    2023-06-14
  • Flutter有状态组件StatefulWidget生命周期详解
    目录1、StatefulWidget的背后2、StatefulWidget的生命周期2.1创建阶段2.2更新阶段2.3销毁阶段总结:1、StatefulWidget的背后 flut...
    99+
    2023-01-13
    Flutter StatefulWidget生命周期 Flutter StatefulWidget有状态组件
  • vue的生命周期钩子与父子组件的生命周期详解
    目录vue的生命周期钩子的介绍父子组件的生命周期加载渲染过程父组件更新过程子组件更新过程父子组件更新过程销毁过程代码示例created和mounted的区别vue的生命周期钩子的介绍...
    99+
    2022-11-13
    vue 生命周期 vue 父子组件生命周期
  • React中生命周期的示例分析
    这篇文章将为大家详细讲解有关React中生命周期的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。React的生命周期两张图带你理解 React的生命周期React的生命周期(旧)class&nbs...
    99+
    2023-06-20
  • Vue中生命周期的示例分析
    这篇文章将为大家详细讲解有关Vue中生命周期的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最简单的Vue 实例//html <div id=&q...
    99+
    2022-10-19
  • 微信小程序App生命周期的示例分析
    小编给大家分享一下微信小程序App生命周期的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序App生命周期:on...
    99+
    2022-10-19
  • Angular组件中生命周期钩子的示例分析
    这篇文章主要介绍了Angular组件中生命周期钩子的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular 组件生命周期钩子其中,红色标记的生命周期钩子只调用一...
    99+
    2023-06-14
  • Flutter生命周期超详细讲解
    目录一、组件生命周期1、StatelessWidget2、StatefulWidget2.1、初始化阶段2.2、状态变化阶段2.3、销毁阶段二、App生命周期一、组件生命周期 flu...
    99+
    2023-01-29
    Flutter生命周期研究 Flutter生命周期方法
  • Vue生命周期实例分析
    这篇文章主要介绍“Vue生命周期实例分析”,在日常操作中,相信很多人在Vue生命周期实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue生命周期实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • 详解Angular组件生命周期(一)
    目录概述一、钩子的调用顺序二、onChanges钩子三、变更检测机制和DoCheck()钩子概述 组件声明周期以及angular的变化发现机制 红色方法只执行一次。 变更检测执行的...
    99+
    2022-11-12
  • React组件的生命周期详解
    目录React生命周期1、初始化阶段2、旧生命周期3、新生命周期4、react中性能优化的方案React生命周期 1、初始化阶段 componentDidMount:render之前...
    99+
    2023-03-19
    React 组件 生命周期 React 生命周期
  • 分析React中组件的生命周期
    这篇文章主要讲解了“分析React中组件的生命周期”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析React中组件的生命周期”吧!初始化在组件初始化阶段会...
    99+
    2022-10-19
  • vue组件有生命周期吗
    vue组件的生命周期有:1.beforeCreate,创建前;2.created,创建后;3.beforemount,载入前;4.mounted,载入后;5.beforeUpdate,更新前;6.updated,更新后;7.beforeDe...
    99+
    2022-10-14
  • vue组件生命周期钩子使用示例详解
    目录组件生命周期图组件生命周期钩子1、beforeCreate2、created3、beforeMount4、mounted5、beforeUpdate6、updated7...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作