android kotlin compose与css、flutter对比

阶段核心分工触发条件优化思路
重组(Compose)构建 / 更新 UI 内容 / 结构内容 / 结构类状态变化(如文字、列表项数)细粒度重组(仅受影响组件执行)
布局(Layout)计算 UI 位置 / 尺寸位置 / 尺寸类状态变化(如偏移、滚动、尺寸)延迟读取位置状态 → 跳过重组,仅触发布局
绘制(Draw)将 UI 渲染到屏幕内容 / 位置 / 尺寸任一变化(或缓存失效)绘制缓存 → 无变化时复用绘制结果

一、Flutter 的渲染流程也分为三个核心阶段,和 Compose 逻辑高度对齐(因为都是声明式 UI):

Flutter 阶段对应 Compose 阶段核心分工触发条件
Build(构建)重组(Composition)执行 build() 方法,生成 Widget 树 → Element 树状态变化(如 setStateProvider 数据更新)
Layout(布局)Layout(布局)执行 RenderObject 的 performLayout(),计算尺寸 / 位置Widget/Element 变化导致尺寸 / 位置改变,或布局参数(如 PaddingPositioned)变化
Paint(绘制)Draw(绘制)执行 RenderObject 的 paint(),将内容绘制到画布Build/Layout 阶段导致内容 / 位置 / 尺寸变化
关键差异:
  • Flutter 的 Build 阶段是 “重新执行 build() 方法”,等价于 Compose 的 “重组”;
  • Flutter 中 “延迟布局阶段读取状态” 的思路也存在(比如用 AnimatedPositioned 控制位置,仅触发布局而非全量 build)。

二、kotlin remember mutableStateOf和flutter State以及Vue Ref之间的相似好区别。

1. 核心共性(响应式的本质)
特性Compose MutableStateFlutter StateVue Ref
核心目标数据驱动 UI 重组数据驱动 Widget 重建数据驱动 DOM 更新
可观察性内置(值变触发重组)需通过 setState 触发重建内置(值变触发依赖收集 + 更新)
状态封装包裹单个值(value 属性)封装组件状态(类成员)包裹单个值(value 属性)
基础用法var a by mutableStateOf(0)int _a = 0; setState(() => _a++);const a = ref(0); a.value++
2. 关键差异(框架理念导致)
维度Compose MutableStateFlutter StateVue Ref
状态归属「无组件绑定」:状态是独立对象,仅通过 remember 绑定组件生命周期「强组件绑定」:State 是 StatefulWidget 的专属内部类,与组件一一对应「无绑定」:全局 / 局部皆可,通过「依赖收集」关联视图
触发更新的方式自动:修改 value 即触发重组(Compose 自动追踪依赖)手动:必须调用 setState 标记状态变化,触发 Widget 重建自动:修改 value 触发更新(Vue 自动收集 Ref 依赖的视图)
持久化规则需手动用 remember/rememberSaveable 避免重组重置天然随 State 实例持久化(组件不销毁则状态保留)天然持久化(除非 Ref 被销毁)
适用粒度细粒度(单个值)粗粒度(组件级,setState 触发整个组件重建)细粒度(单个值)

补充:容易混淆的延伸点

  1. 核心结论:这三者都是响应式编程中「状态封装 + 自动更新 UI」的基础方案,差异仅源于框架的「组件模型」和「更新机制」设计:

    • Flutter 是「组件级手动触发更新」;
    • Compose 是「值级自动触发更新 + 需手动持久化」;
    • Vue 是「值级自动触发更新 + 天然持久化 + 自动依赖收集」。

三、布局父子间的约束(compose、flex、flutter、盒式布局的差异)

布局体系核心逻辑控制权归属尺寸执行顺序典型标识属性
原生 Android Widget子自主定尺寸,父按流排位置子元素主导子定尺寸 → 父按尺寸排 / 适配子:layout_width/wrap_content
CSS 普通布局(block/inline)子自主定尺寸,父按文档流排位置子元素主导子定尺寸 → 父按尺寸排 / 适配子:width/height/margin
Compose 布局父定约束,子在约束内适配父容器主导父定约束 → 子适配约束父:fillMaxWidth;子:fillMax*
CSS Flex/Grid 布局父定 flex/grid 规则,子按规则适配父容器主导父定规则 → 子适配规则父:display: flex/grid;子:flex:1
Flutter 布局父定布局规则 / 约束,子适配父约束父容器主导父定约束 → 子适配约束父:Expanded/Container;子:Flexible

总结:comopse与css flex(Flexible Box) 都是弹性布局,父约束子类。而传统的盒式布局就是子类决定父类组件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值