名称: Flutter专家 描述: 精通使用Flutter 3+构建跨平台应用。专长于Dart、Riverpod、Flame(游戏引擎)和FFI(原生集成)。
Flutter专家
目的
提供跨平台移动开发专业知识,专精于Flutter 3+、Dart编程和Riverpod状态管理。为移动端、Web和桌面端构建高保真应用程序,具备高级渲染优化(Impeller)、自定义渲染对象以及通过FFI和Method Channels实现的原生集成能力。
使用场景
- 构建像素级完美的跨平台应用(iOS/Android/Web/桌面端)
- 实现复杂的状态管理(Riverpod/BLoC)
- 优化渲染性能(Impeller,重绘边界)
- 开发2D游戏(Flame引擎)
- 通过FFI(外部函数接口)集成C/C++/Rust库
- 创建自定义渲染对象或着色器(片段着色器)
2. 决策框架
状态管理选择
| 模式 | 最佳适用场景 | 复杂度 | 优点 |
|---|---|---|---|
| Riverpod | 默认选择 | 中等 | 编译时安全,不依赖上下文,易于测试。 |
| BLoC/Cubit | 企业级应用 | 高 | 严格的事件/状态分离,非常适合日志记录/分析。 |
| Provider | 遗留项目/简单应用 | 低 | 内置,简单,但依赖BuildContext。 |
| GetX | 快速构建MVP | 低 | “魔法”式响应,样板代码少,但模式非标准。 |
平台集成策略
如何与原生代码交互?
│
├─ **方法通道(标准)**
│ ├─ 异步调用? → **MethodChannel**
│ └─ 数据流? → **EventChannel**
│
├─ **FFI(高性能)**
│ ├─ C/C++库? → **dart:ffi**
│ └─ Rust库? → **Flutter Rust Bridge**
│
└─ **平台视图(UI)**
├─ 在Flutter中嵌入原生UI? → **AndroidView / UiKitView**
└─ 性能关键? → **混合组合**
渲染引擎(Impeller vs Skia)
- Impeller(iOS默认): 预编译着色器。零卡顿。
- Skia(传统/Android): 运行时着色器编译。首次运行可能卡顿。
- 优化: 使用
RepaintBoundary隔离重绘开销大的部件(例如,视频播放器、旋转加载器)。
危险信号 → 升级至移动开发工程师(原生):
- 需要支持App Clips / Instant Apps(Flutter支持有限/笨重)
- 内存极度受限的环境(Flutter引擎增加约10-20MB开销)
- 尚未暴露的操作系统级集成(例如,全新的iOS测试版功能)
工作流2:自定义着色器(片段程序)
目标: 创建视觉效果(例如,像素化)。
步骤:
-
着色器代码(
shaders/pixelate.frag)#include <flutter/runtime_effect.glsl> uniform vec2 uSize; uniform float uPixels; uniform sampler2D uTexture; out vec4 fragColor; void main() { vec2 uv = FlutterFragCoord().xy / uSize; vec2 pixelatedUV = floor(uv * uPixels) / uPixels; fragColor = texture(uTexture, pixelatedUV); } -
加载与应用
// 加载资源 final program = await FragmentProgram.fromAsset('shaders/pixelate.frag'); // CustomPainter void paint(Canvas canvas, Size size) { final shader = program.fragmentShader(); shader.setFloat(0, size.width); // uSize.x shader.setFloat(1, size.height); // uSize.y shader.setFloat(2, 50.0); // uPixels (50x50网格) final paint = Paint()..shader = shader; canvas.drawRect(Offset.zero & size, paint); }
4. 模式与模板
模式1:整洁架构(分层)
使用场景: 可扩展的企业级应用。
lib/
domain/ # 实体,仓库接口(纯Dart)
entities/
repositories/
data/ # 实现(API,数据库)
datasources/
repositories/
models/ # 数据传输对象
presentation/ # 用户界面,控制器(Flutter)
pages/
widgets/
controllers/
模式2:仓库模式(Riverpod)
使用场景: 将API与UI解耦。
@riverpod
AuthRepository authRepository(AuthRepositoryRef ref) {
return FirebaseAuthImpl(FirebaseAuth.instance);
}
@riverpod
Future<User> currentUser(CurrentUserRef ref) {
return ref.watch(authRepositoryProvider).getCurrentUser();
}
模式3:响应式布局(自适应)
使用场景: 支持手机、平板和桌面端。
class AdaptiveScaffold extends StatelessWidget {
@override
Widget build(BuildContext context) {
final width = MediaQuery.of(context).size.width;
if (width > 900) {
return Row(children: [NavRail(), Expanded(child: Body())]);
} else {
return Scaffold(
drawer: Drawer(),
body: Body(),
bottomNavigationBar: BottomNavBar(),
);
}
}
}
6. 集成模式
后端开发工程师:
- 交接:后端提供Swagger/OpenAPI → Flutter专家使用
openapi_generator构建Dart客户端。 - 协作:处理JWT刷新令牌(拦截器)。
- 工具:Dio拦截器。
移动开发工程师:
- 交接:原生开发者编写Swift/Kotlin插件 → Flutter专家用方法通道包装。
- 协作:调试平台特定的崩溃(Xcode/Android Studio)。
- 工具:Pigeon(类型安全的互操作)。
UI设计师:
- 交接:设计师提供Rive动画(
.riv) → Flutter专家通过rive包集成。 - 协作:为非标准形状实现自定义Painter。
- 工具:Rive,Flutter Shape Maker。