返回顶部
首页 > 资讯 > 移动开发 >FlutterElement概念简明分析
  • 322
分享到

FlutterElement概念简明分析

FlutterElementFlutterElement分析 2023-05-15 17:05:14 322人浏览 泡泡鱼
摘要

目录一 Element 概念二 继承关系三 生命周期四 方法分析一 Element 概念 这个玩意的概念。到底是什么 ? 官方解释是在树中特定位置的实例。 二 继承关系 elemen

一 Element 概念

这个玩意的概念。到底是什么 ?

官方解释是在树中特定位置的实例。

二 继承关系

element 有 ComponentElement 和 RenderObjectElement 之分

ComponentElement

class StatelessElement extends ComponentElement

class StatefulElement extends ComponentElement

三 生命周期

1 framework 通过在将要被用来作为Element的初始配置的widget 上调用其createElement 方法来创建一个element

2 framework 通过调用mount 方法 将一个新创建的element 加入树中给定的父节点的插槽下面。

mount 方法负责注入任何child widgets,并且会在有需要·的时候,会调用attachRenderObject

将关联的render objects 添加到渲染树中 render tree 中。到这一步的时候,element 会进入active 状态,并且会显示在屏幕上方。

四 方法分析

Element 这个抽象类中有一个方法 叫做 mount 方法 。

  /// Add this element to the tree in the given slot of the given parent.
  ///
  /// The framework calls this function when a newly created element is added to
  /// the tree for the first time. Use this method to initialize state that
  /// depends on having a parent. State that is independent of the parent can
  /// more easily be initialized in the constructor.
  ///
  /// This method transitions the element from the "initial" lifecycle state to
  /// the "active" lifecycle state.
  ///
  /// Subclasses that override this method are likely to want to also override
  /// [update], [visitChildren], [RenderObjectElement.insertRenderObjectChild],
  /// [RenderObjectElement.moveRenderObjectChild], and
  /// [RenderObjectElement.removeRenderObjectChild].
  ///
  /// Implementations of this method should start with a call to the inherited
  /// method, as in `super.mount(parent, newSlot)`.
  @mustCallSuper
  void mount(Element? parent, Object? newSlot) {
    assert(_lifecycleState == _ElementLifecycle.initial);
    assert(widget != null);
    assert(_parent == null);
    assert(
        parent == null || parent._lifecycleState == _ElementLifecycle.active);
    assert(slot == null);
    _parent = parent;
    _slot = newSlot;
    _lifecycleState = _ElementLifecycle.active;
    _depth = _parent != null ? _parent!.depth + 1 : 1;
    if (parent != null) {
      // Only assign ownership if the parent is non-null. If parent is null
      // (the root node), the owner should have already been assigned.
      // See RootRenderObjectElement.assignOwner().
      _owner = parent.owner;
    }
    assert(owner != null);
    final Key? key = widget.key;
    if (key is GlobalKey) {
      owner!._reGISterGlobalKey(key, this);
    }
    _updateInheritance();
    attachNotificationTree();
  }

renderObjectElement 的mount 方法

其主要作用 将element相关联的renderObject插入到渲染树中,插入到渲染树后的element就处于“active”状态,处于“active”状态后就可以显示在屏幕上了。

此处可以看出来,RenderObject? _renderObject; element 是持有renderObject 的引用的

  @override
  void mount(Element? parent, Object? newSlot) {
    super.mount(parent, newSlot);
    assert(() {
      _debugDoingBuild = true;
      return true;
    }());
    _renderObject = (widget as RenderObjectWidget).createRenderObject(this);
    assert(!_renderObject!.debugDisposed!);
    assert(() {
      _debugDoingBuild = false;
      return true;
    }());
    assert(() {
      _debugUpdateRenderObjectOwner();
      return true;
    }());
    assert(_slot == newSlot);
    attachRenderObject(newSlot);
    _dirty = false;
  }

到此这篇关于Flutter Element概念简明分析的文章就介绍到这了,更多相关Flutter Element内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: FlutterElement概念简明分析

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

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

猜你喜欢
  • FlutterElement概念简明分析
    目录一 Element 概念二 继承关系三 生命周期四 方法分析一 Element 概念 这个玩意的概念。到底是什么 ? 官方解释是在树中特定位置的实例。 二 继承关系 elemen...
    99+
    2023-05-15
    Flutter Element Flutter Element分析
  • 怎么分析大数据分析基础概念
    本篇文章给大家分享的是有关怎么分析大数据分析基础概念,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。互联网进一步聚合,对大数据的分析必然会成为一个关键的策略部门的工作。像很多事物...
    99+
    2023-06-19
  • SELinux基本概念的示例分析
    这篇文章主要介绍了SELinux基本概念的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SELinux(Security Enhanced Linux),以下是SEL...
    99+
    2023-06-12
  • C#泛型类概念举例分析
    这篇文章主要讲解了“C#泛型类概念举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#泛型类概念举例分析”吧!C# 泛型类封装不是特定于具体数据类型的操作。泛型类最常用于集合,如链接列...
    99+
    2023-06-17
  • Java逃逸分析的基本概念
    这篇文章主要介绍Java逃逸分析的基本概念,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概念引入我们都知道,Java 创建的对象都是被分配到堆内存上,但是事实并不是这么绝对,通过对Java对象分配的过程分析,可以知道...
    99+
    2023-05-30
    java
  • CSS 中层叠概念的示例分析
    这篇文章将为大家详细讲解有关CSS 中层叠概念的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。屏幕是一个二维平面,然而HTML元素却是排列在三维坐标系中,x为水平...
    99+
    2024-04-02
  • Angular中依赖注入的概念分析
    这篇文章主要为大家展示了“Angular中依赖注入的概念分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular中依赖注入的概念分析”这篇文章吧。依赖注...
    99+
    2024-04-02
  • RocketMQ消费幂概念与使用分析
    目录一、什么是消费幂等二、消息重复的场景分析三、如何实现消费幂等一、什么是消费幂等 幂等:如果有一个操作,多次执行与一次执行所产生的影响是相同的,我们就称这个操作是幂等的。 基于上述...
    99+
    2023-02-13
    RocketMQ消费幂等 RocketMQ幂等消费设计
  • 1、redis基本概念简介
     1.什么是redis   Redis作为一个open source key-value store,与传统的k-v存储开源方案相比,其value类型支持各种常见数据类型(如s...
    99+
    2024-04-02
  • SAP HANA Delivery Unit概念简述
    介绍 在SAP HANA应用开发领域里,我们通常用package来存储modeler views和XS工程等模型。这些包应该被部署到最终的生产服务器上。 Delivery Unit是SAP HAN...
    99+
    2024-04-02
  • Linux分区的概念
    这篇文章主要介绍“Linux分区的概念”,在日常操作中,相信很多人在Linux分区的概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux分区的概念”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一、...
    99+
    2023-06-16
  • Java由浅入深分析多态的概念
    目录1.多态的概念2.向上转型2.1概念2.2常见的向上转型的形式3.重写3.1重写的注意事项在结束继承内容之后便是多态,这同样也是面向对象程序的特性 有一点需要说明:为方便演示,所...
    99+
    2024-04-02
  • 混淆矩阵Confusion Matrix概念分析翻译
    Confusion Matrix 在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监...
    99+
    2024-04-02
  • 如何分析GNU和Linux的编程概念
    今天就跟大家聊聊有关如何分析GNU和Linux的编程概念,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。学习GNU/Linux时,你可能会遇到不懂得问题,这里有GNU/Linux的全面...
    99+
    2023-06-17
  • bloom filter概念讲解以及代码分析
    一. 简介1.什么是bloom filter?Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检...
    99+
    2022-11-15
    bloom_filter
  • MySQL 锁的一些简单概念
    1. 锁的粒度  在MySQL中,只要有多个请求需要在同一时刻修改数据,都会产生并发控制的问题。而锁的作用可以保证同一资源能被某个请求唯一使用。 加锁是会消耗系统资源的,包括获得锁、检查锁是否已解除、释放锁等等操作,都会增加系统的...
    99+
    2020-05-02
    MySQL 锁的一些简单概念
  • Oracle RAC 简介及核心概念
    Oracle RAC(Real Application Clusters)简介及核心概念 随着企业数据量的不断增长和对高可用性、高性能的需求日益突出,数据库集群技术变得越来越重要。Or...
    99+
    2024-03-07
    oracle 概念 rac
  • Spring简明分析Bean作用域
    目录Bean作用域一、singleton(单例模式)二、protoType(原型模式)Bean作用域   经过前面的学习,我们可以知道bean是存在作用域的。 &...
    99+
    2024-04-02
  • Vue高级特性概念原理详细分析
    目录1. 自定义v-model2. $nextTick3. slot 插槽4. Vue 动态组件5. Vue 异步组件6. 使用 keep-alive 缓存组件7. mixin 混入...
    99+
    2023-03-03
    Vue高级特性 Vue高级用法 Vue高级技巧
  • PostgreSQL长事务概念解析
    我们在很多地方应该都听到过长事务的危害,比方说长事务会导致表膨胀之类的。那么在PostgreSQL中什么才算是长事务呢? 首先,在PostgreSQL的官方文档中并没有所谓“长事务”这一定义,似乎...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作