从互联网整理而来
一、Dart 基础
- Dart 的数据类型有哪些?
- var、final、const 的区别
- Dart 中 null safety 是什么,如何使用?
- late 关键字作用与使用场景
- Dart 函数可选参数、命名参数、位置参数区别
- 箭头函数适用范围
- Dart 异步:Future、async/await 原理
- Stream 与 Future 区别,StreamController 使用
- sync*、async*、yield、yield each 作用
- Dart 类中 extends、implements、mixin 区别
- mixin 有什么限制,能否构造函数传参
- 抽象类与接口区别
- 泛型 T、?T、T?、required T 区别
- Dart 单例几种实现方式
- 工厂构造函数 factory 作用
- 常量构造函数使用条件
- 级联运算符 .. 原理
- 空值操作符 ?.、??、??= 用法
- Dart 枚举进阶用法,能否自定义属性方法
- Isolate 是什么,和线程区别,通信方式
- Isolate 共享内存吗,数据传递限制
- Zone 作用是什么
- Dart 垃圾回收机制
- 函数一等公民体现在哪里
- typedef 作用与场景
二、Flutter 框架核心原理
- Flutter 三棵树:Widget、Element、RenderTree 关系
- StatelessWidget 和 StatefulWidget 底层差异
- State 生命周期完整流程
- initState、didChangeDependencies、build、didUpdateWidget、dispose 执行时机
- setState 底层更新机制
- Widget 为什么是不可变的 immutable
- Element 作用,Element 复用逻辑
- RenderObject 职责是什么
- Key 的作用,几种 Key 区别(ValueKey、ObjectKey、UniqueKey、GlobalKey)
- GlobalKey 使用场景与隐患
- LocalKey 解决什么问题
- Widget 重建流程,哪些情况会触发重建
- 什么是 const Widget,好处是什么
- Flutter 渲染流程:布局、绘制、合成步骤
- 布局约束流程:Constraints 传递规则
- 父布局约束如何限制子控件尺寸
- RepaintBoundary 作用,何时使用
- Layer 树作用,缓存机制
- Flutter 与原生 Android/iOS 渲染区别
- Skia 引擎作用
- Impeller 渲染引擎对比 Skia 优势
- Flutter 绘制原理,Canvas、Paint 流程
- PipelineOwner 作用
- WidgetsBinding、SchedulerBinding 职责
- 帧调度流程:Vsync、帧回调执行顺序
- transientCallbacks、persistentCallbacks、postFrameCallbacks 区别
- Flutter 热重载原理,热重启区别
- 编译模式:debug/profile/release 差异
- AOT、JIT 编译区别
- Flutter 页面路由底层实现原理
三、布局 & 基础组件
- Row Column Flex 布局区别,主轴交叉轴概念
- MainAxisAlignment、CrossAxisAlignment 所有枚举值含义
- Expanded、Flexible 区别,flex 参数作用
- Stack、Positioned 布局规则
- Align、Center 底层关系
- Padding、Container 内部结构
- Container 嵌套过多有什么性能问题
- SizedBox、ConstrainedBox、UnconstrainedBox 用途
- AspectRatio、FittedBox 缩放逻辑
- Wrap 自动换行实现原理
- ListView 几种构造方式区别(默认、builder、separated)
- ListView.builder 高性能原理,复用机制
- ListView 滚动复用失效场景
- GridView 使用与性能优化
- SingleChildScrollView 嵌套 ListView 报错解决方案
- CustomScrollView、Sliver 体系是什么
- SliverList、SliverGrid、SliverAppBar、SliverToBoxAdapter 使用场景
- SliverPersistentHeader 固定吸顶实现
- CustomScrollView 滚动统一原理
- Table、DataTable 布局特性
- IntrinsicHeight、IntrinsicWidth 性能损耗原因
- LayoutBuilder 获取父布局约束场景
- MediaQuery 获取设备信息,MediaQuery.of(context) 刷新机制
- LayoutId、MultiChildLayout 自定义布局
- Flow 高性能流式布局适用场景
四、状态管理
- State 自身状态管理优缺点
- InheritedWidget 底层原理,数据传递逻辑
- InheritedModel 对比 InheritedWidget 优势
- Provider 整套库实现原理(ChangeNotifierProvider、Consumer、Selector)
- Selector 为什么能精准局部刷新
- ChangeNotifier 通知更新机制
- StateProvider、FutureProvider、StreamProvider 区别
- Riverpod 对比 Provider 改进点
- Riverpod 全局状态、自动 dispose、无 context 优势
- StateNotifier、AsyncNotifier 使用场景
- Bloc 核心概念:Event、State、Bloc/Cubit
- Cubit 与 Bloc 区别
- BlocProvider、BlocConsumer、BlocBuilder、BlocListener 分工
- Bloc 状态单一数据源优势
- GetX 状态管理原理,GetController 生命周期
- GetX 全局路由、依赖注入实现
- GetX 优缺点,存在什么性能隐患
- Redux 在 Flutter 中使用逻辑
- MobX 响应式原理,Observable、Action、Reaction
- 大型项目如何选型状态管理方案
- 跨页面共享状态几种实现方式对比
- 状态持久化配合状态管理怎么做
五、路由 & 导航
- Navigator 1.0 路由栈管理原理
- MaterialPageRoute、CupertinoPageRoute 区别
- PageRouteBuilder 自定义转场动画
- Navigator push/pop/pushReplacement/popUntil 逻辑
- 路由传参几种方式
- Navigator 2.0 核心组件:Router、RouteInformationParser、RouterDelegate
- Navigator 2.0 完整路由流程
- GoRouter 框架底层封装逻辑
- GoRouter 嵌套路由、路由守卫、参数获取
- 路由栈持久化、页面状态保存方案
- 底部导航多 Tab 页面状态保持实现
- 路由拦截、登录鉴权统一处理
- 原生页面与 Flutter 页面互相跳转路由处理
- 页面返回监听 WillPopScope、PopScope
- 深度链接 deep link 适配方案
六、动画
- Flutter 动画核心类:Animation、AnimationController、CurvedAnimation
- AnimationController vsync 作用,为什么需要 TickerProvider
- SingleTickerProviderStateMixin、TickerProviderStateMixin 区别
- Tween、Animatable 差值计算原理
- 显式动画与隐式动画区别
- AnimatedContainer、AnimatedOpacity 等隐式动画底层
- Hero 共享元素动画实现原理
- PageRoute 共享 Hero 流程
- CustomAnimation 自定义动画组件
- 交错动画 Interval 使用
- 动画性能优化,避免重建
- Lottie 动画集成原理,性能注意点
- 循环动画、反向动画实现
- 动画暂停、恢复、释放资源处理
- 自定义路由转场动画
七、网络 & 本地存储
- dio 库封装思路,拦截器使用
- dio 统一请求头、错误处理、token 自动刷新
- 取消请求 CancelToken 使用场景
- 并发请求、超时处理
- Json 序列化反序列化几种方式(手动、json_serializable)
- fromJson/toJson 生成流程
- Freezed 数据模型优势
- http 库与 dio 对比
- WebSocket 在 Flutter 中使用,重连机制
- shared_preferences 底层存储原理
- Hive 本地数据库优势,Box 使用
- Hive 加密、大数据存储优化
- sqflite 数据库操作,事务使用
- Isolate 中操作数据库注意事项
- 文件读写 path_provider 获取路径
- 图片缓存 cached_network_image 实现逻辑
- 网络请求缓存策略设计
- 接口统一异常捕获封装方案
八、原生交互 MethodChannel
- MethodChannel、BasicMessageChannel、EventChannel 三者区别
- MethodChannel 双向通信完整流程
- Flutter 调用 Android 原生代码步骤
- Flutter 调用 iOS OC/Swift 步骤
- 原生主动推送数据给 Flutter 使用哪个 Channel
- 传参类型限制,复杂对象传递方案
- 多页面 Channel 单例管理
- PlatformView 嵌入原生 View(Android View、iOS UIView)
- PlatformView 性能问题与优化
- 原生页面跳转 Flutter 传参
- 权限通过原生通道申请方案
- 混合栈开发:flutterBoost 原理
- flutterBoost 页面生命周期同步问题
- 原生资源与 Flutter 资源冲突处理
- 通信通道内存泄漏如何避免
九、性能优化专项
- Widget 重建常见诱因与规避手段
- const 构造优化原理
- Key 不合理使用导致的性能问题
- ListView 长列表优化方案
- 图片加载优化:尺寸、缓存、压缩
- RepaintBoundary 拆分重绘区域场景
- 减少 Layer 树层级优化
- 避免使用 Intrinsic 系列控件原因
- 动画卡顿排查思路
- DevTools 工具使用:性能面板、内存、Widget 检查
- 内存泄漏常见场景(Timer、Stream、Channel、Animation)
- 大图片、大量对象内存释放方案
- Isolate 处理耗时计算优化 UI
- build 方法避免耗时操作
- 布局嵌套过深优化手段
- 页面 dispose 资源释放规范
- Profile 模式性能排查要点
- 启动速度优化(包体积、懒加载、预加载)
- Flutter 包体积优化方案
- 滑动卡顿完整排查流程
十、图片、手势、输入、弹窗组件
- Image 几种构造:AssetImage、NetworkImage、FileImage、MemoryImage
- ImageProvider 缓存机制
- Image.network 缓存缺陷,cached_network_image 弥补方案
- DecorationImage、FadeInImage 使用
- GestureDetector 手势识别原理,多手势冲突
- Listener 底层原始手势与 GestureDetector 区别
- 手势竞争、手势忽略场景
- InkWell 水波纹实现原理,必须嵌套 Material
- TextField 控制器 TextEditingController 使用
- TextField 输入监听、格式化、光标控制
- 表单 Form、GlobalKey
校验逻辑 - ModalRoute、showDialog、showBottomSheet 弹窗原理
- 弹窗状态共享问题解决方案
- Draggable、LongPressDraggable 拖拽实现
- Transform 变换不改变布局约束特性
十一、项目工程 & 打包适配
- pubspec.yaml 各字段含义,依赖版本约束
- 本地依赖、Git 依赖、远程依赖配置
- pub 依赖冲突解决方法
- Flutter 多环境配置(开发/测试/生产)
- Flavor 多渠道打包 Android & iOS
- Android 打包 keystore 配置,iOS 证书配置
- AndroidManifest、Info.plist 权限适配
- 屏幕适配方案:媒体查询、比例、flutter_screenutil
- 深色模式适配实现
- 多语言国际化 intl 库使用
- App 图标、启动页配置
- Flutter 插件开发流程
- 平台区分代码编写(dart.io、Platform 判断)
- 混合开发项目目录结构
- CI/CD 自动打包脚本思路
- 版本号管理升级方案
- 第三方插件兼容问题处理
十二、进阶底层 & 疑难场景
- WidgetsApp、MaterialApp、CupertinoApp 内部结构
- ThemeData 主题分发原理,局部主题覆盖
- Navigator 上下文与页面上下文区别
- context 获取上层 Widget 原理,BuildContext 分类
- State 保存在 Element 中,Widget 重建 State 不销毁条件
- Offstage、Visibility 控件隐藏区别
- AbsorbPointer、IgnorePointer 拦截手势差异
- Clip 裁剪控件:ClipRect、ClipRRect、ClipOval 性能
- BackdropFilter 模糊控件性能损耗原因
- RenderBox 自定义控件完整流程
- 自定义 RenderObject 实现步骤
- 自定义 MultiChildRenderObjectWidget
- ScrollController 监听滚动、滚动定位
- ScrollPhysics 滚动回弹、阻尼自定义
- 监听应用前后台切换 AppLifecycleState
- 截屏、屏幕亮度、震动原生能力实现
- WebView 插件使用与通信
- Flutter Web 编译差异,平台兼容问题
- Flutter Windows/macOS/Linux 桌面端适配要点
- 如何实现全局捕获异常
- Timer、StreamSubscription 忘记取消的内存泄漏
- 列表 item 点击状态保存方案
- 异步并发竞态条件问题处理
- 图片大量加载 OOM 解决方案
- 原生弹窗遮挡 Flutter 页面问题
十三、综合项目面试问答题
- 讲一下你项目整体架构分层
- 项目状态管理选型原因
- 长列表卡顿怎么优化的
- 多页面共享登录状态如何实现
- token 过期统一拦截处理方案
- 项目混合栈开发遇到哪些坑
- 图片缓存、网络缓存怎么设计
- 全局网络加载弹窗、错误页封装思路
- 项目通用业务组件封装思路
- 线上卡顿、崩溃排查处理经验
- 如何实现页面无网络重试逻辑
- 复杂表单页面状态管理方案
- 项目包体积优化做了哪些操作
- 多渠道、多环境配置实现
- 封装通用 Dio 请求库完整思路