Skip to content

常用插件

Flutter 生态有丰富的第三方插件,选对插件能事半功倍。本章介绍实际开发中最常用的插件及其用途。

状态管理

插件用途推荐场景
provider轻量级状态管理首选,适合绝大多数项目
riverpodProvider 的升级版大型项目、需要编译时安全检查
get状态管理 + 路由 + 国际化快速原型,但不推荐正式项目
yaml
# pubspec.yaml
dependencies:
  provider: ^6.1.0       # 官方推荐,上手简单

选择建议

  • 初学者 → Provider(文档多、坑少)
  • 大型项目 → Riverpod(更安全、更灵活)
  • 不要用 GetX → 虽然功能多,但过度封装,违反 Flutter 设计理念,不利于长期维护

网络请求

插件用途推荐场景
dio功能完善的 HTTP 客户端首选,支持拦截器、取消请求、文件上传
http简单的 HTTP 请求极简场景,只需 GET/POST
yaml
dependencies:
  dio: ^5.4.0            # 功能强大,支持拦截器
dart
// dio 基础封装
final dio = Dio(BaseOptions(
  baseUrl: 'https://api.example.com',
  connectTimeout: const Duration(seconds: 10),
  receiveTimeout: const Duration(seconds: 10),
));

// 添加拦截器(如自动附加 token)
dio.interceptors.add(InterceptorsWrapper(
  onRequest: (options, handler) {
    options.headers['Authorization'] = 'Bearer $token';
    handler.next(options);
  },
));

// GET 请求
final response = await dio.get('/users');

路由

插件用途推荐场景
go_router声明式路由首选,支持深链接、嵌套路由、重定向
yaml
dependencies:
  go_router: ^14.0.0     # Flutter 官方推荐路由方案
dart
final router = GoRouter(
  routes: [
    GoRoute(path: '/', builder: (_, __) => const HomePage()),
    GoRoute(path: '/login', builder: (_, __) => const LoginPage()),
    GoRoute(
      path: '/user/:id',
      builder: (_, state) => UserProfilePage(id: state.pathParameters['id']!),
    ),
  ],
);

本地存储

插件用途推荐场景
shared_preferences轻量 KV 存储存用户偏好、登录状态、简单配置
hive高性能 NoSQL 数据库需要存储结构化数据、离线缓存
sqfliteSQLite 数据库需要复杂查询、关系型数据
yaml
dependencies:
  shared_preferences: ^2.2.0   # 最常用,简单轻量
  hive: ^2.2.0                 # 需要本地数据库时
dart
// shared_preferences 典型用法
final prefs = await SharedPreferences.getInstance();

// 写入
await prefs.setString('token', 'abc123');
await prefs.setBool('is_dark_mode', true);

// 读取
final token = prefs.getString('token');     // 'abc123'
final isDark = prefs.getBool('is_dark_mode'); // true

// 删除
await prefs.remove('token');

图片与缓存

插件用途推荐场景
cached_network_image网络图片缓存必装,网络图片加载+缓存+占位
image_picker拍照/选图用户上传头像、拍照功能
photo_view图片缩放预览全屏查看图片、双指缩放
yaml
dependencies:
  cached_network_image: ^3.3.0   # 网络图片必用
  image_picker: ^1.0.0           # 需要拍照/选图时
dart
// cached_network_image 用法
CachedNetworkImage(
  imageUrl: 'https://example.com/photo.jpg',
  placeholder: (_, __) => const CircularProgressIndicator(),
  errorWidget: (_, __, ___) => const Icon(Icons.error),
  fadeInDuration: const Duration(milliseconds: 300),
)

UI 增强

插件用途
flutter_screenutil屏幕适配,让 UI 在不同尺寸设备上保持一致
pull_to_refresh下拉刷新 + 上拉加载更多
shimmer骨架屏加载效果(类似 Facebook 加载占位)
lottieLottie 动画(AE 导出的动画文件)
flutter_svgSVG 图片渲染
yaml
dependencies:
  flutter_screenutil: ^5.9.0    # 多设备屏幕适配
  shimmer: ^3.0.0               # 加载骨架屏
  lottie: ^3.0.0                # 复杂动画

权限与设备

插件用途
permission_handler请求和管理系统权限(相机、存储、位置等)
url_launcher打开外部链接、拨打电话、发邮件
connectivity_plus检测网络连接状态
package_info_plus获取应用版本号等信息
device_info_plus获取设备信息(型号、系统版本等)
yaml
dependencies:
  permission_handler: ^11.0.0   # 权限管理
  url_launcher: ^6.2.0          # 跳转外部链接
  connectivity_plus: ^6.0.0     # 网络状态检测

国际化

插件用途
intl国际化与本地化(日期、数字格式化)
yaml
dependencies:
  intl: ^0.19.0

Flutter 自带国际化支持,配合 flutter_localizations 使用:

yaml
dependencies:
  flutter_localizations:
    sdk: flutter

开发工具

插件用途类型
flutter_lints代码规范检查dev_dependencies
build_runner代码生成工具运行器dev_dependencies
freezed不可变数据类代码生成dev_dependencies
json_serializableJSON 序列化代码生成dev_dependencies
mockito单元测试 Mock 生成dev_dependencies
yaml
dev_dependencies:
  flutter_lints: ^5.0.0
  build_runner: ^2.4.0
  freezed: ^2.4.0
  json_serializable: ^6.7.0

新项目推荐 pubspec.yaml

以下是中小型项目推荐的依赖配置模板:

yaml
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

  # 状态管理
  provider: ^6.1.0

  # 路由
  go_router: ^14.0.0

  # 网络
  dio: ^5.4.0

  # 存储
  shared_preferences: ^2.2.0

  # 图片
  cached_network_image: ^3.3.0

  # UI
  flutter_screenutil: ^5.9.0
  shimmer: ^3.0.0

  # 设备
  url_launcher: ^6.2.0
  connectivity_plus: ^6.0.0
  package_info_plus: ^8.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^5.0.0

注意

  • 版本号仅为参考,使用时请到 pub.dev 查看最新版本
  • 不要一次性安装所有插件,按需引入,减少包体积

下一步

基于 Flutter 官方文档整理