插件介绍

share_extend 是一个 Flutter 插件,用于在应用中调用系统分享功能,支持分享文本、图片、视频、文件等多种类型的内容。该插件已适配鸿蒙平台,提供了简单易用的 API 来实现跨应用的内容分享。

主要功能包括:

  1. 文本分享:可以分享纯文本内容
  2. 图片分享:可以分享本地图片文件
  3. 视频分享:可以分享本地视频文件
  4. 文件分享:可以分享任意类型的文件
  5. 多图分享:可以同时分享多张图片

安装与使用

1. 安装方式

在项目的 pubspec.yaml 文件中添加以下依赖配置:

dependencies:
  share_extend:
    git:
      url: "https://atomgit.com/openharmony-sig/fluttertpc_share_extend.git"

执行命令安装依赖:

flutter pub get

2. API 使用示例

2.1 基本使用
import 'package:flutter/material.dart';
import 'package:share_extend/share_extend.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _picker = ImagePicker();

  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Container(
          child: Center(
            child: Column(
              children: <Widget>[
                // 分享文本
                ElevatedButton(
                  onPressed: () {
                    ShareExtend.share("share text", "text",
                        sharePanelTitle: "share text title",
                        subject: "share text subject");
                  },
                  child: Text("share text"),
                ),
                // 分享图片
                ElevatedButton(
                  onPressed: () async {
                    final res = await _picker.pickImage(source: ImageSource.gallery);
                    if (res != null && res.path != null) {
                      ShareExtend.share(res.path, "image",
                          sharePanelTitle: "share image title",
                          subject: "share image subject");
                    }
                  },
                  child: Text("share image"),
                ),
                // 分享视频
                ElevatedButton(
                  onPressed: () async {
                    final res = await _picker.pickVideo(source: ImageSource.gallery);
                    if (res != null && res.path != null) {
                      ShareExtend.share(res.path, "video");
                    }
                  },
                  child: Text("share video"),
                ),
                // 分享文件
                ElevatedButton(
                  onPressed: () async {
                    Directory dir = await getApplicationDocumentsDirectory();
                    File testFile = File("${dir.path}/test.txt");
                    if (!await testFile.exists()) {
                      await testFile.create(recursive: true);
                      testFile.writeAsStringSync("test for share documents file");
                    }
                    ShareExtend.share(testFile.path, "file");
                  },
                  child: Text("share file"),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
2.2 多图分享示例
import 'package:multi_image_picker/multi_image_picker.dart';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';

// 分享多张图片
_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: "share multi image");
}

// 将字节数据写入图片文件
Future<String> _writeByteToImageFile(ByteData byteData) async {
  Directory dir = 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;
}
2.3 核心 API 说明
方法名 功能描述 参数说明 返回值类型 鸿蒙支持
share(String text, String type,{Rect? sharePositionOrigin,String? sharePanelTitle,String subject = “”,List? extraTexts}) 分享单个内容 text:分享内容(文本或文件路径)
type:分享类型(“text”、“image”、“audio”、“video”、“file”)
sharePanelTitle:分享面板标题
subject:分享主题
Future
shareMultiple(List list, String type,{Rect? sharePositionOrigin,String? sharePanelTitle,String subject = “”,List? extraTexts}) 分享多个内容 list:分享内容列表(文本或文件路径列表)
type:分享类型
其他参数同 share 方法
Future

约束与限制

兼容性

已在以下环境中测试通过:

  • Flutter: 3.7.12-ohos-1.0.6; SDK: 5.0.0(12); IDE: DevEco Studio: 5.0.13.200; ROM: 5.1.0.120 SP3;

总结

share_extend 插件为鸿蒙平台提供了简单易用的系统分享功能,支持多种类型的内容分享。通过简洁的 API 设计,开发者可以轻松实现文本、图片、视频、文件等内容的分享,适用于各种需要跨应用分享内容的场景。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐