flutter_social_share_plus

A Flutter plugin for sharing content to Instagram and Facebook on Android and iOS.

Features

Feature Android iOS
Instagram Direct (text)
Instagram Feed (image/video)
Instagram Feed (multiple files)
Instagram Reels (video)
Instagram Stories
Facebook Feed (photos + hashtag)
Facebook Stories
System Share Sheet
Check installed apps

Installation

dependencies:
  flutter_social_share_plus: ^0.1.0

Android Setup

1. Add Facebook SDK dependency

In your app's android/app/build.gradle:

dependencies {
    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
}

2. Add FileProvider

In android/app/src/main/AndroidManifest.xml, add inside <application>:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

Create android/app/src/main/res/xml/file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <cache-path name="cache" path="." />
    <external-path name="external" path="." />
</paths>

3. Register Facebook App (required for Facebook features)

Create android/app/src/main/res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>
</resources>

Get your App ID and Client Token from Meta for Developers → Your App → Settings → Basic / Advanced → Security.

Add inside <application> in AndroidManifest.xml:

<meta-data
    android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id" />
<meta-data
    android:name="com.facebook.sdk.ClientToken"
    android:value="@string/facebook_client_token" />
<activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name" />
<provider
    android:name="com.facebook.FacebookContentProvider"
    android:authorities="com.facebook.app.FacebookContentProvider${facebook_app_id}"
    android:exported="true" />

iOS Setup

Minimum deployment target: iOS 15.0

The Facebook SDK (FBSDKCoreKit and FBSDKShareKit) is included automatically via CocoaPods — no manual dependency needed.

1. Add URL schemes to Info.plist

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fbYOUR_FACEBOOK_APP_ID</string>
        </array>
    </dict>
</array>

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram</string>
    <string>instagram-stories</string>
    <string>fb</string>
    <string>fb-messenger</string>
    <string>facebook-stories</string>
    <string>fbauth2</string>
    <string>fbapi</string>
    <string>fbshareextension</string>
</array>

2. Add Facebook credentials to Info.plist

<key>FacebookAppID</key>
<string>YOUR_FACEBOOK_APP_ID</string>
<key>FacebookClientToken</key>
<string>YOUR_FACEBOOK_CLIENT_TOKEN</string>
<key>FacebookDisplayName</key>
<string>YOUR_APP_NAME</string>

3. Add photo library usage description to Info.plist

Required for Instagram Feed sharing (media is saved to the photo library first):

<key>NSPhotoLibraryUsageDescription</key>
<string>Required to share media to Instagram</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Required to save media for sharing</string>

4. Initialize Facebook SDK in AppDelegate.swift

import UIKit
import Flutter
import FBSDKCoreKit

@main
@objc class AppDelegate: FlutterAppDelegate {
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        ApplicationDelegate.shared.application(
            application,
            didFinishLaunchingWithOptions: launchOptions
        )
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

    override func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey: Any] = [:]
    ) -> Bool {
        ApplicationDelegate.shared.application(app, open: url, options: options)
    }
}

Usage

import 'package:flutter_social_share_plus/flutter_social_share_plus.dart';

// Check which apps are installed
final apps = await SocialSharePlus.getInstalledApps();
// apps = {SocialPlatform.instagram: true, SocialPlatform.facebook: false}

// Share to Instagram Feed
final result = await SocialSharePlus.instagramFeed(filePath: '/path/to/image.jpg');

// Share to Instagram Story
await SocialSharePlus.instagramStory(
  config: StoryConfig(
    appId: 'YOUR_FACEBOOK_APP_ID',
    backgroundTopColor: '#FF5733',
    backgroundBottomColor: '#3366FF',
    stickerImage: '/path/to/sticker.png', // optional
  ),
);

// Share to Facebook Feed
await SocialSharePlus.facebookFeed(
  filePaths: ['/path/to/photo.jpg'],
  hashtag: '#flutter',
);

// System share sheet
await SocialSharePlus.shareSystem(
  text: 'Check this out!',
  filePaths: ['/path/to/file.jpg'],
);

// Handle results
switch (result) {
  case ShareSuccess():
    print('Shared successfully');
  case ShareError(:final message):
    print('Error: $message');
  case ShareAppNotInstalled():
    print('App not installed');
  case ShareCancelled():
    print('User cancelled');
}

Notes

  • Facebook Feed on Android uses the Facebook Android SDK's native share dialog. The app must be registered on Meta for Developers.
  • Instagram Feed on iOS saves media to the photo library before sharing — NSPhotoLibraryUsageDescription is required.
  • Instagram Feed multiple files on iOS: only the first file is shared (iOS limitation).
  • Facebook/Instagram Stories share via deep-link intent — no SDK callback is returned, so the result is always ShareSuccess if the app is installed.

Libraries

flutter_social_share_plus
Flutter plugin for sharing content to Instagram and Facebook.