Flutter Instagram视频故事分享插件instagram_video_story_share的使用

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

Flutter Instagram视频故事分享插件instagram_video_story_share的使用

instagram_video_story_share是一个用于iOS平台的Flutter插件,允许开发者将视频文件分享到Instagram故事中。该插件特别适用于希望在社交媒体应用中实现类似TikTok功能的应用程序。

功能概述

  • 支持将视频文件分享到Instagram故事。
  • 提供了检查Instagram是否已安装的功能。
  • 目前仅支持iOS平台。

iOS配置

设置最低iOS版本

确保你的项目的最低iOS版本设置为10.0或更高。

配置Info.plist

为了能够使用分享到Instagram故事的功能,你需要在Info.plist文件中添加以下内容:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram-stories</string>
</array>

使用方法

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

dependencies:
  instagram_video_story_share: ^latest_version
  path_provider: ^2.0.2

然后,你可以通过以下代码来使用这个插件:

检查Instagram是否已安装

bool isInstagramInstalled = await InstagramVideoStoryShare.instagramInstalled;

分享视频到Instagram故事

bool success = await InstagramVideoStoryShare.share(videoPath: myVideoPath);

获取视频路径示例

你可能需要使用path_provider包来获取视频文件的路径:

import 'dart:io';
import 'package:path_provider/path_provider.dart';

Future<String> videoFilePath() async {
  ByteData bytes = await rootBundle.load("assets/$videoName");
  String dir = (await getApplicationDocumentsDirectory()).path;
  File file = await writeToFile(bytes, '$dir/$videoName');
  return file.path;
}

Future<File> writeToFile(ByteData data, String path) async {
  final buffer = data.buffer;
  File file = await File(path).writeAsBytes(
      buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
  return file;
}

完整示例Demo

以下是完整的示例代码,演示如何集成和使用instagram_video_story_share插件:

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:instagram_video_story_share/instagram_video_story_share.dart';
import 'package:path_provider/path_provider.dart';

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

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

class _MyAppState extends State<MyApp> {
  bool instagramInstalled = false;
  bool isLoading = false;
  bool isShared = false;

  String videoName = "sponty.mp4";

  @override
  void initState() {
    super.initState();
  }

  Future<String> videoFilePath() async {
    ByteData bytes = await rootBundle.load("assets/$videoName");
    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = await writeToFile(bytes, '$dir/$videoName');
    return file.path;
  }

  Future<File> writeToFile(ByteData data, String path) async {
    final buffer = data.buffer;
    File file = await File(path).writeAsBytes(
        buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
    return file;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Share Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text("Share video to Instagram Stories"),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                isLoading
                    ? "Loading..."
                    : isShared
                        ? "SHARED"
                        : "not shared yet",
              ),
              TextButton(
                onPressed: () async {
                  print("checking if instagram is installed");
                  try {
                    bool result =
                        await InstagramVideoStoryShare.instagramInstalled;
                    print("instagramInstalled: $result");
                    if (!mounted) return;
                    setState(() {
                      instagramInstalled = result;
                    });
                  } on PlatformException catch (e) {
                    print("ERROR: $e");
                  }
                },
                child: Text("Check if Instagram is installed"),
              ),
              Text(
                instagramInstalled ? "Instagram Installed" : "Check first..",
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () async {
            setState(() {
              isLoading = true;
            });
            String videoPath = await videoFilePath();
            print("videoPath: $videoPath");
            try {
              bool result =
                  await InstagramVideoStoryShare.share(videoPath: videoPath);
              print("result: $result");
              if (!mounted) return;
              setState(() {
                isShared = result;
                isLoading = false;
              });
            } on PlatformException catch (e) {
              print("ERROR: $e");
            }
          },
          child: Icon(Icons.video_call),
        ),
      ),
    );
  }
}

以上代码展示了如何在Flutter应用中集成并使用instagram_video_story_share插件,以便将视频分享到Instagram故事中。请确保按照上述步骤进行配置,并根据实际需求调整代码。


更多关于Flutter Instagram视频故事分享插件instagram_video_story_share的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Instagram视频故事分享插件instagram_video_story_share的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用instagram_video_story_share插件来分享Instagram视频故事的示例代码。请确保你已经将instagram_video_story_share插件添加到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  instagram_video_story_share: ^最新版本号 # 请替换为实际可用的最新版本号

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

示例代码

  1. 导入插件

在你的Dart文件中(例如main.dart),首先导入插件:

import 'package:instagram_video_story_share/instagram_video_story_share.dart';
  1. 请求权限

由于分享视频通常需要访问存储权限,请确保你在AndroidManifest.xmlInfo.plist中声明了必要的权限。

Android:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

iOS:

<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to share videos.</string>
<key>NSCameraUsageDescription</key>
<string>We need access to your camera to record videos.</string>

然后在你的Dart代码中请求权限(如果需要):

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.storage.status;
  if (!status.isGranted) {
    status = await Permission.storage.request();
    if (!status.isGranted) {
      // 权限被拒绝,处理逻辑
      return;
    }
  }
}

注意:你需要添加permission_handler插件到你的pubspec.yaml文件中并安装它。

  1. 分享视频

接下来,编写分享视频的代码:

void shareVideoToInstagram() async {
  // 视频文件路径(确保路径正确)
  String videoPath = "/path/to/your/video.mp4";
  
  // 调用插件的分享方法
  try {
    bool result = await InstagramVideoStoryShare.shareToStory(
      videoPath: videoPath,
      thumbnailPath: "/path/to/your/thumbnail.jpg", // 可选,提供视频缩略图路径
      coverImagePath: "/path/to/your/cover.jpg",   // 可选,提供视频封面图路径
    );
    
    if (result) {
      print("视频分享成功");
    } else {
      print("视频分享失败");
    }
  } catch (e) {
    print("分享过程中发生错误: $e");
  }
}

注意:

  • videoPath是视频文件的路径。
  • thumbnailPathcoverImagePath是可选的,分别用于提供视频的缩略图和封面图。
  1. 调用分享功能

最后,你可以在你的UI中添加一个按钮来调用shareVideoToInstagram函数:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Instagram Video Story Share'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              await requestPermissions();
              shareVideoToInstagram();
            },
            child: Text('分享视频到Instagram'),
          ),
        ),
      ),
    );
  }
}

总结

上述代码展示了如何在Flutter项目中集成和使用instagram_video_story_share插件来分享视频到Instagram故事。请确保你处理了必要的权限请求,并提供了正确的视频文件路径。如果遇到任何问题,请查阅插件的官方文档或在其GitHub仓库中寻求帮助。

回到顶部