Flutter社交分享功能插件dl_share_plugin的使用

Flutter社交分享功能插件dl_share_plugin的使用

简介

dl_share_plugin 是一个用于实现社交分享功能的 Flutter 插件。它支持多种社交平台的分享,包括钉钉(DD)、微信(WECHAT)等。

使用指南

初始化插件

首先,确保在 pubspec.yaml 文件中添加 dl_share_plugin 依赖:

dependencies:
  dl_share_plugin: ^版本号

然后,在项目的入口文件中初始化插件:

import 'package:dl_share_plugin/share_flutter_api_impl.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with ShareFlutterApiImpl {
  [@override](/user/override)
  void initState() {
    super.initState();
    
    Future.delayed(Duration(milliseconds: 1000), () {
      initPlatformState();
    });
  }

  // 平台消息异步初始化
  Future<void> initPlatformState() async {}
}

分享本地图片

钉钉分享本地图片

void clickShareImage() async {
  String tempDir = await PathProviderAndroid().getExternalStoragePath() ?? '';
  print("tempDir:   $tempDir");
  
  ShareBody shareBody = ShareBody(
    shareType: ShareType.IMG_LOCAL.value,
    mLocalPath: "$tempDir/image_597.png",
  );
  
  UnifyShare.instance
      ?.platform(SharePlatform.DD)
      ?.shareType(ShareType.IMG_LOCAL)
      ?.content(shareBody)
      ?.startShare(shareCallback: (platfrom, shareStatus) {
    print("分享拿到回调了 ");
  });
}

微信分享图片

void wxShareImage() async {
  ShareBody shareBody = ShareBody(
    shareType: ShareType.IMG_LOCAL.value,
    mLocalPath: "tempDir/image_597.png",
  );

  UnifyShare.instance
      ?.platform(SharePlatform.WECHAT)
      ?.shareType(ShareType.IMG_LOCAL)
      ?.content(shareBody)
      ?.startShare(shareCallback: (platfrom, shareStatus) {
    print("分享拿到回调了 ");
  });
}

检查平台安装状态

InkWell(
  onTap: () {
    UnifyShare.instance
        ?.platform(SharePlatform.WECHAT)
        ?.checkPlatformInstall();
  },
  child: Container(
    margin: EdgeInsets.only(top: 20),
    color: Colors.green,
    width: double.infinity,
    height: 40,
    alignment: Alignment.center,
    child: Text("检查安装"),
  ),
)

授权请求

InkWell(
  onTap: () {
    DlPermissionUtil.checkPermission([Permission.storage], onSuccess: () {}, onFailed: () {});
  },
  child: Container(
    color: Colors.green,
    width: double.infinity,
    height: 40,
    alignment: Alignment.center,
    child: Text("授权"),
  ),
)

完整示例代码

以下是完整的示例代码,展示了如何使用 dl_share_plugin 实现社交分享功能。

import 'dart:async';
import 'package:dl_share_plugin/enums.dart';
import 'package:dl_share_plugin/share_api.pigeon.dart' as pigoneShare;
import 'package:dl_share_plugin/share_flutter_api_impl.dart';
import 'package:dl_share_plugin/unify_share.dart';
import 'package:flutter/material.dart';
import 'package:path_provider_android/path_provider_android.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:share_example/permission_util.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with ShareFlutterApiImpl {
  String _platformVersion = 'Unknown';

  pigoneShare.ShareHostApi? hostApi;

  [@override](/user/override)
  void shareCallBack(ShareEnumContainer enumContainer, String message) {
    if (enumContainer.shareStatus == ShareStatus.SUCCESS.value) {
      print(">>>在平台:  ${enumContainer.sharePlatform} 上分享成功");
    }
  }

  [@override](/user/override)
  void initState() {
    super.initState();

    Future.delayed(Duration(milliseconds: 1000), () {
      initPlatformState();
      UnifyShare.init(wxAppId: "", androidPackageName: "");
    });
  }

  // 平台消息异步初始化
  Future<void> initPlatformState() async {}

  void clickShareImage() async {
    String tempDir = await PathProviderAndroid().getExternalStoragePath() ?? '';
    print("tempDir:   $tempDir");

    ShareBody shareBody = ShareBody(
      shareType: ShareType.IMG_LOCAL.value,
      mLocalPath: "$tempDir/image_597.png",
    );

    UnifyShare.instance
        ?.platform(SharePlatform.DD)
        ?.shareType(ShareType.IMG_LOCAL)
        ?.content(shareBody)
        ?.startShare(shareCallback: (platfrom, shareStatus) {
      print("分享拿到回调了 ");
    });
  }

  void wxShareImage() async {
    ShareBody shareBody = ShareBody(
      shareType: ShareType.IMG_LOCAL.value,
      mLocalPath: "tempDir/image_597.png",
    );

    UnifyShare.instance
        ?.platform(SharePlatform.WECHAT)
        ?.shareType(ShareType.IMG_LOCAL)
        ?.content(shareBody)
        ?.startShare(shareCallback: (platfrom, shareStatus) {
      print("分享拿到回调了 ");
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Column(
          children: [
            InkWell(
              onTap: () {
                DlPermissionUtil.checkPermission([Permission.storage], onSuccess: () {}, onFailed: () {});
              },
              child: Container(
                color: Colors.green,
                width: double.infinity,
                height: 40,
                alignment: Alignment.center,
                child: Text("授权"),
              ),
            ),
            InkWell(
              onTap: () {},
              child: Container(
                margin: EdgeInsets.only(top: 20),
                color: Colors.green,
                width: double.infinity,
                height: 40,
                alignment: Alignment.center,
                child: Text("注册"),
              ),
            ),
            InkWell(
              onTap: () {
                UnifyShare.instance
                    ?.platform(SharePlatform.WECHAT)
                    ?.checkPlatformInstall();
              },
              child: Container(
                margin: EdgeInsets.only(top: 20),
                color: Colors.green,
                width: double.infinity,
                height: 40,
                alignment: Alignment.center,
                child: Text("检查安装"),
              ),
            ),
            InkWell(
              onTap: () {
                clickShareImage();
              },
              child: Container(
                margin: EdgeInsets.only(top: 20),
                color: Colors.green,
                width: double.infinity,
                height: 40,
                alignment: Alignment.center,
                child: Text("钉钉分享本地图片"),
              ),
            ),
            InkWell(
              onTap: () {
                wxShareImage();
              },
              child: Container(
                margin: EdgeInsets.only(top: 20),
                color: Colors.green,
                width: double.infinity,
                height: 40,
                alignment: Alignment.center,
                child: Text("微信分享图片"),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter社交分享功能插件dl_share_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter社交分享功能插件dl_share_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dl_share_plugin 是一个用于 Flutter 的社交分享插件,它允许你在应用中轻松地分享内容到各种社交媒体平台,如微信、QQ、微博等。以下是如何在 Flutter 项目中使用 dl_share_plugin 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 dl_share_plugin 的依赖:

dependencies:
  flutter:
    sdk: flutter
  dl_share_plugin: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 dl_share_plugin

import 'package:dl_share_plugin/dl_share_plugin.dart';

3. 初始化插件

在分享之前,通常需要初始化插件。你可以在 initState 或其他合适的地方进行初始化:

[@override](/user/override)
void initState() {
  super.initState();
  DlSharePlugin.initialize();
}

4. 分享内容

你可以使用 DlSharePlugin 来分享文本、图片、链接等内容。以下是一些常见的分享示例:

分享文本

DlSharePlugin.shareText("Check out this awesome app!", platform: SharePlatform.wechat);

分享图片

DlSharePlugin.shareImage("https://example.com/image.png", platform: SharePlatform.wechat);

分享链接

DlSharePlugin.shareLink("https://example.com", platform: SharePlatform.wechat);

5. 选择分享平台

dl_share_plugin 支持多种社交平台,你可以通过 platform 参数指定分享的平台。以下是一些支持的平台:

  • SharePlatform.wechat: 微信
  • SharePlatform.qq: QQ
  • SharePlatform.weibo: 微博
  • SharePlatform.system: 系统分享

6. 处理分享结果

你可以通过 Future 来处理分享的结果:

DlSharePlugin.shareText("Hello, world!", platform: SharePlatform.wechat).then((result) {
  if (result == ShareResult.success) {
    print("分享成功");
  } else {
    print("分享失败");
  }
});

7. 处理权限

在某些平台上,分享功能可能需要特定的权限。请确保你的应用已经获取了必要的权限,并在 AndroidManifest.xmlInfo.plist 中添加相应的配置。

8. 其他功能

dl_share_plugin 还支持其他功能,如分享到朋友圈、分享到QQ空间等。你可以查看插件的文档以获取更多详细信息。

示例代码

以下是一个完整的示例,展示如何在 Flutter 应用中使用 dl_share_plugin 分享文本到微信:

import 'package:flutter/material.dart';
import 'package:dl_share_plugin/dl_share_plugin.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Share Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              DlSharePlugin.shareText("Check out this awesome app!", platform: SharePlatform.wechat).then((result) {
                if (result == ShareResult.success) {
                  print("分享成功");
                } else {
                  print("分享失败");
                }
              });
            },
            child: Text('Share to WeChat'),
          ),
        ),
      ),
    );
  }
}
回到顶部