Flutter社交分享扩展插件hyj_share_extend的使用

Flutter社交分享扩展插件hyj_share_extend的使用

ShareExtend

pub package

调用系统分享的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

1 回复

更多关于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:QQ
  • weibo:微博
  • 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('分享图片'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部