Flutter社交分享扩展插件hyj_share_extend的使用
Flutter社交分享扩展插件hyj_share_extend的使用
ShareExtend
调用系统分享的Flutter组件,支持分享文本、图片、视频和文件。
安装
dependencies:
hyj_share_extend: "^1.0.0"
iOS
添加下面的key到工程的info.plist文件,路径 <project root>/ios/Runner/Info.plist
,用于将分享的图片保存到相册。
<key>NSPhotoLibraryAddUsageDescription</key>
<string>这里填写为什么需要相册写入权限的描述语句</string>
Android
如果涉及到要分享存储空间里面的文件,需要用到读写存储空间权限的,请在项目的android模块的下,添加读写权限,路径为 <project root>/android/app/src/main/AndroidManifest.xml
。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
导入
import 'package:share_extend/share_extend.dart';
使用
// 分享文本
ShareExtend.share("分享文本", "text", sharePanelTitle: "分享文本标题", subject: "分享文本主题");
// 分享图片(例子中使用了一个image_picker的插件来实现图片的选择)
File f = await ImagePicker.pickImage(source: ImageSource.gallery);
ShareExtend.share(f.path, "image", sharePanelTitle: "分享图片标题", subject: "分享图片主题");
// 分享视频
File f = await ImagePicker.pickVideo(source: ImageSource.gallery);
ShareExtend.share(f.path, "video", sharePanelTitle: "分享视频标题", subject: "分享视频主题");
// 分享文件
Directory dir = Platform.isAndroid
? await getExternalStorageDirectory()
: await getApplicationDocumentsDirectory();
File testFile = new File("${dir.path}/flutter/test.txt");
if (!await testFile.exists()) {
await testFile.create(recursive: true);
testFile.writeAsStringSync("测试分享文档文件");
}
ShareExtend.share(testFile.path, "file", sharePanelTitle: "分享文件标题", subject: "分享文件主题");
// 分享多图(借助了MultiImagePicker来多选获取图片,由于该库没有提供文件路径,因此demo里面先将图片保存为图片再调用分享)
_shareMultipleImages() async {
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: "分享多张图片");
}
Future<String> _writeByteToImageFile(ByteData byteData) async {
Directory dir = Platform.isAndroid
? await getExternalStorageDirectory()
: await getApplicationDocumentsDirectory();
File imageFile = new File(
"${dir.path}/flutter/${DateTime.now().millisecondsSinceEpoch}.png");
imageFile.createSync(recursive: true);
imageFile.writeAsBytesSync(byteData.buffer.asUint8List(0));
return imageFile.path;
}
示例代码
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:multi_image_picker/multi_image_picker.dart';
import 'package:share_extend/share_extend.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _picker = ImagePicker();
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Container(
child: Center(
child: Column(
children: <Widget>[
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.white70),
foregroundColor: MaterialStateProperty.all(Colors.black)),
onPressed: () {
ShareExtend.share("分享文本", "text", sharePanelTitle: "分享文本标题", subject: "分享文本主题");
},
child: Text("分享文本"),
),
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.white70),
foregroundColor: MaterialStateProperty.all(Colors.black)),
onPressed: () async {
final res = await _picker.getImage(source: ImageSource.gallery);
if (res.path != null) {
ShareExtend.share(res.path, "image", sharePanelTitle: "分享图片标题", subject: "分享图片主题");
}
},
child: Text("分享图片"),
),
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.white70),
foregroundColor: MaterialStateProperty.all(Colors.black)),
onPressed: () async {
final res = await _picker.getVideo(source: ImageSource.gallery);
if (res.path != null) {
ShareExtend.share(res.path, "video", sharePanelTitle: "分享视频标题", subject: "分享视频主题");
}
},
child: Text("分享视频"),
),
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.white70),
foregroundColor: MaterialStateProperty.all(Colors.black)),
onPressed: () {
_shareStorageFile();
},
child: Text("分享文件"),
),
ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.white70),
foregroundColor: MaterialStateProperty.all(Colors.black)),
onPressed: () {
_shareMultipleImages();
},
child: Text("分享多张图片"),
),
],
),
),
),
),
);
}
///分享多张图片
_shareMultipleImages() async {
List<Asset> assetList = await MultiImagePicker.pickImages(maxImages: 5);
var imageList = <String>[];
for (var asset in assetList) {
String path = await _writeByteToImageFile(await asset.getByteData(quality: 30));
imageList.add(path);
}
ShareExtend.shareMultiple(imageList, "image", subject: "分享多张图片");
}
Future<String> _writeByteToImageFile(ByteData byteData) async {
Directory dir = Platform.isAndroid
? await getExternalStorageDirectory()
: await getApplicationDocumentsDirectory();
File imageFile = new File(
"${dir.path}/flutter/${DateTime.now().millisecondsSinceEpoch}.png");
imageFile.createSync(recursive: true);
imageFile.writeAsBytesSync(byteData.buffer.asUint8List(0));
return imageFile.path;
}
///分享存储文件
_shareStorageFile() async {
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("测试分享文档文件");
}
ShareExtend.share(testFile.path, "file", sharePanelTitle: "分享文件标题", subject: "分享文件主题");
}
}
更多关于Flutter社交分享扩展插件hyj_share_extend的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter社交分享扩展插件hyj_share_extend的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
hyj_share_extend
是一个 Flutter 插件,用于在 iOS 和 Android 平台上实现社交分享功能。它允许你分享文本、图片、文件等内容到各种社交平台,如微信、QQ、微博等。
以下是如何使用 hyj_share_extend
插件的详细步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 hyj_share_extend
插件的依赖:
dependencies:
flutter:
sdk: flutter
hyj_share_extend: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 hyj_share_extend
插件:
import 'package:hyj_share_extend/hyj_share_extend.dart';
3. 基本使用
hyj_share_extend
提供了 ShareExtend
类来实现分享功能。你可以使用 ShareExtend.share
方法来分享文本、图片、文件等内容。
分享文本
ShareExtend.share("这是分享的文本内容", "text");
分享图片
ShareExtend.share("/path/to/image.png", "image");
分享文件
ShareExtend.share("/path/to/file.pdf", "file");
4. 指定分享平台(可选)
你可以通过指定 platform
参数来限制分享的平台。例如,只分享到微信:
ShareExtend.share("这是分享的文本内容", "text", sharePanelTitle: "分享到微信", platform: SharePlatform.wechat);
5. 处理分享结果(可选)
你可以通过 ShareExtend.share
方法的返回值来获取分享的结果:
bool success = await ShareExtend.share("这是分享的文本内容", "text");
if (success) {
print("分享成功");
} else {
print("分享失败");
}
6. 支持的分享类型
hyj_share_extend
支持以下分享类型:
text
:文本image
:图片file
:文件
7. 支持的分享平台
hyj_share_extend
支持以下分享平台:
wechat
:微信qq
:QQweibo
:微博system
:系统分享面板
8. 注意事项
- 在 iOS 上,你可能需要在
Info.plist
中添加相应的权限声明,以便使用某些分享功能。 - 在 Android 上,确保你已经在
AndroidManifest.xml
中添加了必要的权限。
9. 示例代码
以下是一个完整的示例代码,展示如何使用 hyj_share_extend
插件分享文本和图片:
import 'package:flutter/material.dart';
import 'package:hyj_share_extend/hyj_share_extend.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('社交分享示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
bool success = await ShareExtend.share("这是分享的文本内容", "text");
if (success) {
print("分享成功");
} else {
print("分享失败");
}
},
child: Text('分享文本'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
bool success = await ShareExtend.share("/path/to/image.png", "image");
if (success) {
print("分享成功");
} else {
print("分享失败");
}
},
child: Text('分享图片'),
),
],
),
),
),
);
}
}