<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Flutter on korilin&#39;s blog</title>
    <link>https://korilin.com/tags/flutter/</link>
    <description>Recent content in Flutter on korilin&#39;s blog</description>
    <generator>Hugo -- 0.155.3</generator>
    <language>cn-zh</language>
    <lastBuildDate>Tue, 11 Jan 2022 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://korilin.com/tags/flutter/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Flutter 绘制流程分析与代码实践</title>
      <link>https://korilin.com/posts/analysis-flutter-paint-process/</link>
      <pubDate>Tue, 11 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://korilin.com/posts/analysis-flutter-paint-process/</guid>
      <description>&lt;h2 id=&#34;render-tree-的创建过程&#34;&gt;Render Tree 的创建过程&lt;/h2&gt;
&lt;h3 id=&#34;renderobject-的类型&#34;&gt;RenderObject 的类型&lt;/h3&gt;
&lt;p&gt;我们知道 Element 主要分为负责渲染的 &lt;strong&gt;RenderObjectElement&lt;/strong&gt;  和负责组合的 &lt;strong&gt;ComponentElement&lt;/strong&gt; 两大类，而创建 RenderObject 节点的是前者 &lt;code&gt;mount()&lt;/code&gt; 方法中调用的 &lt;code&gt;RenderObjectWidget.createRenderObject()&lt;/code&gt; 方法。&lt;/p&gt;
&lt;p&gt;该方法是一个抽象方法，需要子类实现，对于不同的布局的 Widget 创建的 RenderObject 类型也不一样，在 Render Tree 中最主要的有两种 RenderObject：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先是在 RenderObject 注释说明中大量提到了一个类 &lt;strong&gt;RenderBox&lt;/strong&gt;，它是大部分的 RenderObjectWidget 所对应的 RenderObject 的抽象类&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-dart&#34; data-lang=&#34;dart&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8b949e;font-style:italic&#34;&gt;/// A render object in a 2D Cartesian coordinate system.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8b949e;font-style:italic&#34;&gt;/// 一个在 2D 坐标系中的渲染对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff7b72&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#ff7b72&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#f0883e;font-weight:bold&#34;&gt;RenderBox&lt;/span&gt; &lt;span style=&#34;color:#ff7b72&#34;&gt;extends&lt;/span&gt; RenderObject
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;以及 Render Tree 的根节点 &lt;strong&gt;RenderView&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-dart&#34; data-lang=&#34;dart&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8b949e;font-style:italic&#34;&gt;/// The root of the render tree.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8b949e;font-style:italic&#34;&gt;/// Render Tree 的根节点，处理渲染管道的引导和渲染树的输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8b949e;font-style:italic&#34;&gt;/// 它有一个填充整个输出表面的 RenderBox 类型的唯一子节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff7b72&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#f0883e;font-weight:bold&#34;&gt;RenderView&lt;/span&gt; &lt;span style=&#34;color:#ff7b72&#34;&gt;extends&lt;/span&gt; RenderObject &lt;span style=&#34;color:#ff7b72&#34;&gt;with&lt;/span&gt; RenderObjectWithChildMixin&lt;span style=&#34;color:#ff7b72;font-weight:bold&#34;&gt;&amp;lt;&lt;/span&gt;RenderBox&lt;span style=&#34;color:#ff7b72;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其他的类型的 RenderObject 基本是为了特定布局（如滑动、列表）的实现，但大部分都直接或间接集成自 RenderBox。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
