字
字节笔记本
2026年2月22日
ShareExtend:Flutter 系统分享插件
本文介绍 ShareExtend,一个 Flutter 平台的开源分享插件。该插件支持调用系统原生分享功能,可分享文本、图片、视频和文件等多种类型内容。截至目前,该项目在 GitHub 上已获得 182 stars,73 forks。
项目简介
ShareExtend 是一个 Flutter 插件,封装了 iOS 和 Android 平台的系统分享功能。开发者可以通过简单的 API 调用,实现跨平台的内容分享,无需处理复杂的原生代码。
核心特性
- 文本分享 - 分享纯文本内容到其他应用
- 图片分享 - 支持单张和多张图片分享
- 视频分享 - 分享视频文件到社交平台
- 文件分享 - 支持任意类型文件的分享
- 跨平台 - 同时支持 iOS 和 Android
- 简单易用 - 简洁的 API 设计,快速集成
技术栈
- Flutter/Dart - 跨平台开发框架
- Swift/Objective-C - iOS 原生实现
- Kotlin/Java - Android 原生实现
安装指南
添加依赖
在 pubspec.yaml 文件中添加依赖:
yaml
dependencies:
share_extend: "^2.0.0"iOS 配置
在 ios/Runner/Info.plist 中添加相册权限描述,用于将分享的图片保存到相册:
xml
<key>NSPhotoLibraryAddUsageDescription</key>
<string>这里填写为什么需要相册写入权限的描述语句</string>Android 配置
如需分享存储空间中的文件,在 android/app/src/main/AndroidManifest.xml 中添加读写权限:
xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>快速开始
导入插件
dart
import 'package:share_extend/share_extend.dart';基础用法
分享文本
dart
ShareExtend.share(
"share text", // 分享内容
"text", // 类型
"android share panel title", // Android 分享面板标题
"share subject" // 分享主题
);分享图片
dart
// 使用 image_picker 选择图片
File f = await ImagePicker.pickImage(source: ImageSource.gallery);
ShareExtend.share(f.path, "image");分享视频
dart
File f = await ImagePicker.pickVideo(source: ImageSource.gallery);
ShareExtend.share(f.path, "video");分享文件
dart
Directory dir = Platform.isAndroid
? await getExternalStorageDirectory()
: await getApplicationDocumentsDirectory();
File testFile = File("${dir.path}/flutter/test.txt");
if (!await testFile.exists()) {
await testFile.create(recursive: true);
testFile.writeAsStringSync("test for share documents file");
}
ShareExtend.share(testFile.path, "file");高级用法
分享多张图片
dart
_shareMultipleImages() async {
// 使用 MultiImagePicker 多选图片
List<Asset> assetList = await MultiImagePicker.pickImages(maxImages: 5);
var imageList = List<String>();
for (var asset in assetList) {
String path = await _writeByteToImageFile(
await asset.getByteData(quality: 30)
);
imageList.add(path);
}
ShareExtend.shareMultiple(
imageList,
"image",
subject: "share multi image"
);
}
Future<String> _writeByteToImageFile(ByteData byteData) async {
Directory dir = Platform.isAndroid
? await getExternalStorageDirectory()
: await getApplicationDocumentsDirectory();
File imageFile = File(
"${dir.path}/flutter/${DateTime.now().millisecondsSinceEpoch}.png"
);
imageFile.createSync(recursive: true);
imageFile.writeAsBytesSync(byteData.buffer.asUint8List(0));
return imageFile.path;
}API 参考
ShareExtend.share
分享单个内容。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | String | 是 | 分享内容(文本内容或文件路径) |
| type | String | 是 | 类型:text、image、video、file |
| androidTitle | String | 否 | Android 分享面板标题 |
| subject | String | 否 | 分享主题(邮件等使用) |
ShareExtend.shareMultiple
分享多个内容(目前主要支持多图分享)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| list | List | 是 | 文件路径列表 |
| type | String | 是 | 类型:image 等 |
| subject | String | 否 | 分享主题 |
注意事项
- 权限处理 - Android 6.0+ 需要动态申请存储权限
- 文件路径 - 确保分享的文件路径有效且可访问
- 多图分享 - 部分应用可能不支持多图分享,建议提供降级方案
- iOS 相册 - 保存图片到相册需要用户授权
项目链接
- GitHub 仓库: https://github.com/zhouteng0217/ShareExtend
- Pub 包: https://pub.dartlang.org/packages/share_extend
- License: MIT
分享: