常用插件
Flutter 生态有丰富的第三方插件,选对插件能事半功倍。本章介绍实际开发中最常用的插件及其用途。
状态管理
| 插件 | 用途 | 推荐场景 |
|---|---|---|
| provider | 轻量级状态管理 | 首选,适合绝大多数项目 |
| riverpod | Provider 的升级版 | 大型项目、需要编译时安全检查 |
| 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 数据库 | 需要存储结构化数据、离线缓存 |
| sqflite | SQLite 数据库 | 需要复杂查询、关系型数据 |
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 加载占位) |
| lottie | Lottie 动画(AE 导出的动画文件) |
| flutter_svg | SVG 图片渲染 |
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.0Flutter 自带国际化支持,配合 flutter_localizations 使用:
yaml
dependencies:
flutter_localizations:
sdk: flutter开发工具
| 插件 | 用途 | 类型 |
|---|---|---|
| flutter_lints | 代码规范检查 | dev_dependencies |
| build_runner | 代码生成工具运行器 | dev_dependencies |
| freezed | 不可变数据类代码生成 | dev_dependencies |
| json_serializable | JSON 序列化代码生成 | 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 查看最新版本
- 不要一次性安装所有插件,按需引入,减少包体积
