Flutter Widget Life Cycle 组件生命周期

这篇具有很好参考价值的文章主要介绍了Flutter Widget Life Cycle 组件生命周期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flutter Widget Life Cycle 组件生命周期

Flutter Widget Life Cycle 组件生命周期,程序人生

视频

前言

了解 widget 生命周期,对我们开发组件还是很重要的。

今天会把无状态、有状态组件的几个生命周期函数一起过下。

Flutter Widget Life Cycle 组件生命周期,程序人生

原文 https://ducafecat.com/blog/flutter-widget-life-cycle

参考

https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html

https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html

Stateless

无状态组件比较简单就是一个 build 函数,每次外部新状态压入,进行调用。

class TitleWidget extends StatelessWidget {
  const TitleWidget({super.key, required this.title});

  final String title;

  @override
  Widget build(BuildContext context) {
    return Text(title);
  }
}
Flutter Widget Life Cycle 组件生命周期,程序人生

步骤

createState 创建状态

当您创建一个statefulWidget时,这将自动创建。

  @override
  State<CounterWidget> createState() => _CounterWidgetState();

initState 初始化状态

在小部件创建之前和构建方法之前调用

一般用来初始状态数据

  int _counter = 0;

  @override
  void initState() {
    print('initState');
    super.initState();
    _counter = 10;
  }

didChangeDependencies 依赖改变

当每个依赖项更改此状态时,调用此方法

在构建小部件的第一次调用initState()之后,也可以立即调用它。

  @override
  void didUpdateWidget(covariant CounterWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    print('didUpdateWidget');
  }

deactivate 停用

当小部件暂时从小部件树中移除时,将调用此方法。

  @override
  void deactivate() {
    print('deactivate');
    super.deactivate();
  }

dispose 释放资源

当小部件从小部件树中永久移除时

  @override
  void dispose() {
    print('dispose');
    super.dispose();
  }

完整代码

// ignore_for_file: avoid_print

import 'package:flutter/material.dart';

class CounterWidget extends StatefulWidget {
  const CounterWidget({super.key, required this.title});

  final String title;

  // 1. 创建状态
  @override
  State<CounterWidget> createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget{
  int _counter = 0;

  // 2. 初始化状态
  // 在小部件创建之前和构建方法之前调用
  @override
  void initState() {
    print('initState');
    super.initState();
    _counter = 10;
  }

  // 3. 当每个依赖项更改此状态时,调用此方法
  // 在构建小部件的第一次调用initState()之后,也可以立即调用它。
  @override
  void didChangeDependencies() {
    print('didChangeDependencies');
    super.didChangeDependencies();
  }

  // 4. 当小部件重新构建时,将调用此方法。
  // 这个用于取消订阅在initState()中订阅的旧对象,
  // 并在更新的小部件配置需要替换对象时订阅新对象。
  @override
  void didUpdateWidget(covariant CounterWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    print('didUpdateWidget');
  }

  // 5. 停用
  // 当小部件暂时从小部件树中移除时,将调用此方法。
  @override
  void deactivate() {
    print('deactivate');
    super.deactivate();
  }

  // 6. 释放资源
  // 当小部件从小部件树中永久移除时
  @override
  void dispose() {
    print('dispose');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    print('build');

    return Column(
      children: [
        // 标题
        Text(widget.title),

        // 计数
        ElevatedButton(
          onPressed: () {
            setState(() {
              _counter++;
            });
          },
          child: Text('counter > $_counter'),
        ),
      ],
    );
  }
}

代码

https://github.com/ducafecat/flutter_develop_tips/tree/main/flutter_application_widget_life_cycle

小结

了解小部件的生命周期非常重要,这样你就可以编写高效且节省内存的代码。通过了解生命周期,你可以避免创建不必要的对象和资源。

  • 尽可能使用无状态小部件。无状态小部件比有状态小部件更高效和节省内存。

  • 只有在需要更新小部件的状态时才使用有状态小部件。

  • 尽量避免不必要地调用 setState() 。调用 setState() 会导致 build() 方法再次被调用,这可能会造成额外的开销。

  • 当您的小部件不再需要时,请处理掉它们使用的任何资源。这将有助于防止内存泄漏。

感谢阅读本文

如果我有什么错?请在评论中让我知道。我很乐意改进。


© 猫哥 ducafecat.com

end

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-612261.html

到了这里,关于Flutter Widget Life Cycle 组件生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flutter开发实战-父子Widget组件调用方法

    flutter开发实战-父子Widget组件调用方法 在最近开发中遇到了需要父组件调用子组件方法,子组件调用父组件的方法。这里记录一下方案。 父组件使用globalKey.currentState调用子组件具体方法,子组件通过方法回调callback方法调用父组件的方法。 例如示例中的 例如父组件 父组件使

    2024年02月15日
    浏览(42)
  • Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理

    Flutter笔记 Flutter的应用生命周期状态(lifecycleState)管理 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134127670 【介绍】: WidgetsBinding.instance 是Flutter中用于管理应用程序事件和生命周期的重要工具

    2024年02月06日
    浏览(42)
  • Flutter中的AppLifecycleListener:应用生命周期监听器介绍及使用

    引言 当你在Flutter中需要监听应用程序的生命周期变化时,可以使用 AppLifecycleListener 。在Flutter 3.13中, AppLifecycleListener 被添加到Framework中,用于监听应用程序的生命周期变化,并响应退出应用程序的请求等支持。 在Flutter 3.13之前,我们通常使用 WidgetsBindingObserver 的 didChange

    2024年01月20日
    浏览(47)
  • Android Jetpack中Lifecycle使用生命周期感知型组件处理生命周期

    在使用Kotlin实现Android Jetpack中Lifecycle使用生命周期感知型组件处理生命周期的功能时,你需要以下步骤: 首先,在app的build.gradle文件中添加Lifecycle相关库的依赖项: 然后,在你的Activity或Fragment中创建一个LifecycleObserver对象,并使用@OnLifecycleEvent注解来实现相应的生命周期方法

    2024年01月21日
    浏览(48)
  • 【React】组件生命周期、组件通信、setState

    ◼ 组件化思想的应用: ​  有了组件化的思想,我们在之后的开发中就要充分的利用它。 ​  尽可能的将页面拆分成一个个小的、可复用的组件。 ​  这样让我们的代码更加方便组织和管理,并且扩展性也更强。 ◼ React的组件相对于Vue更加的灵活和多样,按照不同的

    2024年01月20日
    浏览(42)
  • 小程序组件的生命周期

    组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。 其中,最重要的生命周期是 created attached detached ,包含一个组件实例生命流程的最主要时间点。          ·组件实例刚刚被创建好时, created 生命周期被触发

    2023年04月15日
    浏览(37)
  • React 组件生命周期

    Mounting(挂载):已插入真实 DOM Updating(更新):正在被重新渲染 Unmounting(卸载):已移出真实 DOM Mounting阶段叫挂载阶段,伴随整个虚拟DOM的声明。它里面有四个小的生命周期函数,分别是: constructor:初始化属性 componentWillMount:在组件即将被挂载到页面的时候执行 render:页面s

    2024年02月10日
    浏览(48)
  • Angular组件生命周期详解

    当 Angular 实例化组件类 并渲染组件视图及其子视图时,组件实例的生命周期就开始了。生命周期一直伴随着变更检测,Angular 会检查数据绑定属性何时发生变化,并按需更新视图和组件实例。当 Angular 销毁组件实例并从 DOM 中移除它渲染的模板时,生命周期就结束了。当 Ang

    2024年02月05日
    浏览(43)
  • 学习Vue:组件生命周期

    在Vue.js中,组件的生命周期是指组件从创建到销毁的整个过程,而生命周期钩子函数则是在不同阶段执行的函数,允许您在特定时间点添加自定义逻辑。本文将详细介绍组件的生命周期以及常用的生命周期钩子函数。 组件的生命周期可以分为以下几个阶段: 创建阶段: 在这

    2024年02月12日
    浏览(39)
  • Unity之组件的生命周期

    PS:第二天,依旧在摸鱼学unity 我本身是由Web后端转到了游戏后端,最近因为工作原因在学ET框架。学到了 ECS 编程模式开发(E —— Entity,C —— Component , S —— System)实体、组件、逻辑开发。 我是这么理解的:组件是挂载到实体上的,组件中记录了实体所需要的数据,然

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包