# Flutter 面试题精选

覆盖 Dart、Flutter Framework、渲染、状态、并发、平台集成、性能、测试、发布、工程实战,以及 Flutter / React Native / uni-app 高频对比。每题均含速记、代码、详细解析和追问;核心流程可逐帧交互。

# 1. 架构与选型

# 1. Flutter 的整体架构分哪几层?各层干什么?

⚡ 30 秒速记

  • 三层:Framework(Dart)→ Engine(C++)→ Embedder(各平台原生代码),越往下越贴近系统
  • Framework 内部再分:foundation → animation / painting / gestures → rendering → widgets → Material / Cupertino
  • 三棵树:Widget 是配置(轻、不可变、随时重建),Element 是实例和身份(持有 State),RenderObject 管布局和绘制
  • build 被调用 ≠ 重新布局 ≠ 重新绘制,中间有 Element 做比对,只有属性真变了才往下标脏
  • 业务代码几乎只碰 widgets 及以上,自定义布局/绘制才下到 rendering 层

Flutter 自上而下是 Framework、Engine、Embedder 三层,业务写的 Dart 代码全在 Framework 里。 Framework 负责把你的 Widget 变成一棵渲染树,算出布局、生成绘制指令;Engine 是 C++ 写的,带着 Dart 运行时、文字排版和渲染后端(Skia 或 Impeller),把绘制指令真正变成像素;Embedder 是每个平台的壳,负责建窗口、接 vsync、转发触摸和生命周期。面试我会顺带讲三棵树:Widget 只是一份配置,重建很便宜,Element 才是真正挂在树上的身份,RenderObject 干重活,所以「频繁 build」本身不一定是性能问题。

# 先用大白话把三层讲清楚

可以把 Flutter 应用想成一个自带画笔的游戏:Framework 是游戏逻辑,决定画什么;Engine 是画笔和画布,负责真的画出来;Embedder 是游戏机的外壳,管屏幕、按键和开关机。原生 Android 的按钮是系统画的,Flutter 的按钮是 Engine 自己一笔一笔画的,系统只提供一块空白画布。

层 语言 主要内容 业务会不会碰
Framework Dart widgets、rendering、手势、动画、Material / Cupertino 组件库 天天碰
Engine C++ Dart VM、Skia / Impeller、文字排版、platform channel 的底层通道 基本不碰
Embedder Java/Kotlin、ObjC/Swift、C++ 窗口/Surface、线程、vsync、输入事件、插件注册 写插件、混合开发时碰
webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部