Flutter内容分享插件share_me的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter内容分享插件share_me的使用

简介

share_me 是一个包,它使用原生代码在iOS和Android设备上以简单、快速和简便的方式分享内容。

介绍

适用于两个平台:iOSAndroid。目前提供了两种选项:ShareMe.system() 和 ShareMe.file()

使用方法

Android配置
  1. android/app/src/main/AndroidManifest.xml文件中的manifest标签中添加以下属性:

    xmlns:tools="http://schemas.android.com/tools"
    

    例如:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            package="your package...">
    
  2. android/app/src/main/AndroidManifest.xml文件中的manifest/application标签中添加以下代码:

    <provider android:name="androidx.core.content.FileProvider" 
            android:authorities="${applicationId}.fileprovider" 
            android:exported="false" 
            android:grantUriPermissions="true" 
            tools:replace="android:authorities">
            <meta-data 
                android:name="android.support.FILE_PROVIDER_PATHS" 
                android:resource="@xml/file_paths"/>
    </provider>
    
  3. app/src/main/res/xml文件夹中创建一个名为file_paths.xml的XML文件,并将以下代码粘贴到文件中:

    <paths>
        <cache-path
            name="cache"
            path="." />
    </paths>
    
iOS配置

为了使用ShareMe.file(),请在你的Info.plist中添加以下内容:

<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册权限</string>

示例演示

iOS分享示例

iOS分享示例

Android分享示例

Android分享示例

完整示例Demo

以下是完整的Flutter应用示例代码:

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:share_me/share_me.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'ShareMe Example',
      themeMode: ThemeMode.system,
      theme: ThemeData(
        useMaterial3: true,
      ),
      onGenerateRoute: (RouteSettings settings) {
        switch (settings.name) {
          case '/':
            return MaterialPageRoute(
              maintainState: false,
              builder: (_) => const ShareMeApp(),
              settings: settings,
            );
        }
        return null;
      },
    );
  }
}

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

  [@override](/user/override)
  State<ShareMeApp> createState() => _ShareMeAppState();
}

class _ShareMeAppState extends State<ShareMeApp> {
  // 分享文件的方法
  void shareMe(String url) async {
    final byteData = await NetworkAssetBundle(Uri.parse(url)).load(url);
    final imageData = byteData.buffer.asUint8List();
    final name = url.split('/').last;
    final mimeType = 'image/${name.split('.').last}';
    
    // 创建XFile对象
    XFile.fromData(imageData, name: name, mimeType: mimeType);

    // 调用ShareMe.file方法分享文件
    ShareMe.file(
      name: name,
      mimeType: mimeType,
      file: imageData,
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('ShareMeApp Plugin example app'),
      ),
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 分享系统默认内容按钮
            ElevatedButton(
              onPressed: () async {
                ShareMe.system(
                  title: 'Title', // 标题
                  url: 'https://themonstersapp.com/', // URL
                  description: 'Descripcion', // 描述
                  subject: 'Subjet', // 主题
                );
              },
              child: const Text('Share'),
            ),
            // 分享文件按钮
            ElevatedButton(
              onPressed: () {
                shareMe('https://themonstersapp.com/images/bg-static.jpg'); // 图片URL
              },
              child: const Text('Share File'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用share_me插件的一个基本示例。请注意,share_me可能不是一个广泛认知的插件,因为Flutter社区更常用的是shareshare_plus插件。不过,这里我假设share_me插件提供了类似的接口,并基于这种假设给出示例。如果share_me的API不同,请参考其官方文档进行调整。

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

dependencies:
  flutter:
    sdk: flutter
  share_me: ^latest_version  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下方式使用share_me插件:

import 'package:flutter/material.dart';
import 'package:share_me/share_me.dart';  // 假设包名正确

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Share Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SharePage(),
    );
  }
}

class SharePage extends StatelessWidget {
  final String shareText = "这是一段要分享的文字!";
  final String shareUrl = "https://www.example.com";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Share Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 使用share_me插件进行分享
            ShareMe.share(
              text: shareText,
              url: shareUrl,
              subject: "分享的主题",  // 可选
              chooserTitle: "选择分享渠道",  // 可选
            ).then((result) {
              if (result) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text("分享成功!")),
                );
              } else {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text("分享取消!")),
                );
              }
            }).catchError((error) {
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text("分享失败:${error.message}")),
              );
            });
          },
          child: Text('分享'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。点击按钮时,会调用ShareMe.share方法来分享文本和URL。注意,这里假设ShareMe.share方法接受texturlsubjectchooserTitle等参数,这些参数可能需要根据share_me插件的实际API进行调整。

重要提示:由于share_me可能不是一个广为人知的插件,以上代码是基于对类似插件(如shareshare_plus)的假设编写的。如果share_me的API不同,请查阅其官方文档或GitHub仓库以获取准确的用法。

如果你发现share_me插件不存在或不符合预期,建议考虑使用更流行的shareshare_plus插件。这些插件的文档和社区支持通常更为完善。

回到顶部