Flutter内容分享插件share_stories的使用

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

Flutter内容分享插件share_stories的使用

share_stories 是一个用于在Instagram和Facebook上分享媒体的插件。它支持分享到Instagram的故事、Facebook的故事以及Facebook的Reels。

开始使用

Android

  1. 权限设置

    android/src/main/AndroidManifest.xml 文件中添加以下权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  2. 配置Provider

    android/src/main/AndroidManifest.xml 文件中添加Provider配置:

    <provider android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.flutter.social_share"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_provider_paths" />
    </provider>
    
  3. 创建file_provider_paths.xml文件

    android/src/main/res/xml/file_provider_paths.xml 文件中添加以下内容:

    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-path name="external" path="." />
        <external-files-path name="external_files" path="." />
        <external-cache-path name="external_cache" path="." />
        <files-path name="files" path="." />
    </paths>
    
  4. 针对Android 11及以上版本

    需要在 android/src/main/AndroidManifest.xml 文件中添加queries标签以确保应用能够查询所需的信息:

    • 对于Instagram故事(图片):

      <queries>
          <intent>
              <action android:name='com.instagram.share.ADD_TO_STORY' />
              <data android:mimeType='image/*' />
          </intent>
      </queries>
      
    • 对于Instagram故事(视频):

      <queries>
          <intent>
              <action android:name='com.instagram.share.ADD_TO_STORY' />
              <data android:mimeType='video/*' />
          </intent>
      </queries>
      
    • 对于Facebook故事(图片):

      <queries>
          <intent>
              <action android:name='com.facebook.stories.ADD_TO_STORY' />
              <data android:mimeType='image/*' />
          </intent>
      </queries>
      
    • 对于Facebook故事(视频):

      <queries>
          <intent>
              <action android:name='com.facebook.stories.ADD_TO_STORY' />
              <data android:mimeType='video/*' />
          </intent>
      </queries>
      
    • 对于Facebook Reels(视频):

      <queries>
          <intent>
              <action android:name='com.facebook.reels.SHARE_TO_REEL' />
              <data android:mimeType='video/*' />
          </intent>
      </queries>
      

使用示例

分享到Instagram故事

ShareStories.shareToInstagram(
    backgroundAssetUri: file.uri,
    stickerAssetUri: image.uri,
    topColor: Colors.blue,
    bottomColor: Colors.red
);

分享到Facebook故事

ShareStories.shareToStoryFacebook(
    backgroundAssetUri: file.uri,
    stickerAssetUri: image.uri,
    topColor: Colors.blue,
    bottomColor: Colors.red,
    appID: "xxxxxxxxxxxxxxxx"
);

分享到Facebook Reels

ShareStories.shareToReelsFacebook(
    backgroundAssetUri: file.uri,
    stickerAssetUri: image.uri,
    topColor: Colors.blue,
    bottomColor: Colors.red,
    appID: "xxxxxxxxxxxxxxxx"
);

完整示例Demo

以下是一个完整的示例Demo,展示了如何使用 share_stories 插件分享到Instagram故事。

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("示例"),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              ElevatedButton(
                onPressed: () {
                  // 假设 file 和 image 已经定义好
                  ShareStories.shareToInstagram(
                    backgroundAssetUri: file.uri,
                    stickerAssetUri: image.uri,
                    topColor: Colors.blue,
                    bottomColor: Colors.red
                  );
                },
                child: Text("分享到Instagram故事")
              )
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用share_stories插件的代码示例。请注意,share_stories插件的具体API和功能可能会随着版本的更新而变化,因此请参考最新的官方文档和插件仓库以获取最准确的信息。

首先,确保你已经在pubspec.yaml文件中添加了share_stories依赖:

dependencies:
  flutter:
    sdk: flutter
  share_stories: ^最新版本号  # 替换为实际最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用share_stories插件来分享内容:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ShareStoriesExample(),
    );
  }
}

class ShareStoriesExample extends StatefulWidget {
  @override
  _ShareStoriesExampleState createState() => _ShareStoriesExampleState();
}

class _ShareStoriesExampleState extends State<ShareStoriesExample> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Share Stories Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Click the button to share a story'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _shareStory,
              child: Text('Share Story'),
            ),
          ],
        ),
      ),
    );
  }

  void _shareStory() async {
    try {
      // 构建要分享的内容
      final ShareStoryContent content = ShareStoryContent(
        title: 'My Awesome Story',
        description: 'This is a description of my awesome story.',
        imageUrl: 'https://example.com/image.jpg',  // 替换为实际图片URL
        // 其他可选参数,如视频URL、标签等,根据插件支持的功能添加
      );

      // 分享故事
      await ShareStories.share(content);

      // 分享成功后的处理(如显示Snackbar)
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Story shared successfully!')),
      );
    } catch (e) {
      // 处理分享失败的情况
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Failed to share story: $e')),
      );
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮,当点击该按钮时,会尝试分享一个包含标题、描述和图片URL的故事。

请注意:

  1. ShareStoryContent类及其构造函数参数可能会根据share_stories插件的API有所不同,请确保参考最新的插件文档。
  2. imageUrl应该是一个有效的图片URL,你可以替换为任何你想要分享的图片的URL。
  3. 插件可能支持更多的分享内容类型(如视频、标签等),你可以根据需求添加相应的参数。
  4. 捕获异常并处理分享失败的情况是很重要的,以确保用户有良好的体验。

再次强调,由于插件API可能会更新,请务必参考share_stories插件的官方文档以获取最新和最准确的信息。

回到顶部