# Flutter进阶

# 状态管理

# Provider

  • ChangeNotifier + ChangeNotifierProvider;Consumer、context.watch/read/select。
  • 多 Provider 组合;ProxyProvider 依赖其他 Provider。
  • 适合中小型应用、局部状态与全局状态混合。

# Riverpod

  • Provider 定义不依赖 BuildContext;ref.watch/read/listen;自动依赖与测试友好。
  • StateProvider、FutureProvider、StreamProvider;family、autoDispose。
  • 适合需要强依赖注入与可测试性的项目。

# Bloc / Cubit

  • 事件 → Bloc → 状态;单一职责、可预测、易测试。
  • BlocBuilder、BlocListener、BlocConsumer;mapEventToState、emit。
  • 适合复杂业务流与多步骤交互。

# GetX

  • 响应式变量、依赖注入、路由、国际化一体;语法简洁但需注意与 Flutter 生命周期的配合。
  • 适合快速原型或偏好“全家桶”的团队。

# 路由与导航

  • Navigator.push/pop;命名路由 MaterialApp(routes: ...);onGenerateRoute 做参数传递。
  • Go Router:声明式路由、深链、嵌套、redirect;适合中大型应用。
  • 传参:构造函数、ModalRoute.of(context).settings.arguments、路由表里封装。

# 网络与本地存储

  • http、dio(拦截器、取消、超时、FormData);反序列化 json_serializable、freezed。
  • shared_preferences、path_provider + 文件;sqflite/hive 做本地库;secure_storage 存敏感信息。

# 性能优化

  • const 构造函数与 const 组件树,减少重建。
  • ListView.builder(懒加载);RepaintBoundary 隔离重绘;避免在 build 里创建大对象或回调。
  • 图片:cached_network_image、合适分辨率、precacheImage;大图考虑解码与裁剪。
  • 包体积:--split-debug-info、--obfuscate;分析工具查看大 so 与资源。

# 平台通道与插件

  • MethodChannel:Flutter 与原生(Android/iOS)互调;InvokeMethod、setMethodCallHandler。
  • EventChannel:原生向 Flutter 推流;适合持续事件。
  • 开发插件:flutter create --template=plugin;实现平台端 API 与 Dart 端封装。

# 测试

  • 单元测试:test 包;mockito 模拟依赖;ViewModel/逻辑类测试。
  • Widget 测试:testWidgets、Finder、WidgetTester;pump、tap、expect。
  • 集成测试:IntegrationTest;真机或模拟器上跑完整流程。

# 国际化与主题

  • intl、flutter_localizations;Arb 文件与 l10n 生成;MaterialApp localizationsDelegates、supportedLocales。
  • ThemeData、ColorScheme、TextTheme;Dark theme;子组件通过 Theme.of(context) 获取。

# 最佳实践小结

  • 组件拆分与复用;状态管理选型一致;路由清晰、深链可测。
  • 错误处理与加载/空状态统一;网络层封装、重试与缓存策略。
  • 可访问性(语义、字体缩放、对比度);性能与包体积持续关注。
  • 代码规范(lint)、文档与注释;版本与依赖管理(pub、版本号)。