flutter_screen_share 0.0.1 copy "flutter_screen_share: ^0.0.1" to clipboard
flutter_screen_share: ^0.0.1 copied to clipboard

PlatformmacOS

A Flutter plugin for screen sharing on macOS using ScreenCaptureKit.

FlutterScreenSharePlugin #

A Flutter plugin for macOS that enables screen sharing using Apple's ScreenCaptureKit (for macOS 12.3 and later) and CGDisplayStream (for earlier versions). This plugin supports real-time screen capture with WebP/JPEG encoding and integration with Flutter's texture system.

Features #

  • Supports macOS screen sharing
  • Uses ScreenCaptureKit for modern macOS versions (12.3+)
  • Falls back to CGDisplayStream for older macOS versions
  • Encodes frames as WebP or JPEG
  • Supports Flutter texture rendering
  • Provides streaming frame data
  • Allows display and window selection for capture

Installation #

Add the plugin to your pubspec.yaml:

dependencies:
  flutter_screen_share: ^latest_version

Run:

flutter pub get

macOS Setup #

Info.plist Permissions #

Add these permissions to your macos/Runner/Info.plist file:

<key>NSScreenCaptureUsageDescription</key>
<string>This app needs screen capture access.</string>

Entitlements #

Modify your macos/Runner/debug.entitlements and release.entitlements:

<key>com.apple.security.screen-recording</key>
	<true/>

<key>com.apple.security.device.screen-capture</key>
<true/> //older mac versions

Usage #

1. Import the Package #

import 'package:flutter_screen_share/flutter_screen_share.dart';

2. Create a ScreenShareController #

final controller = ScreenShareController();

3. Start Screen Capture #

Using a Dialog:

controller.startCaptureWithDialog(
  context: context,
  onData: (Uint8List frame) {
    // Handle frame data
  },
);

Using a Specific Display:

final displays = await FlutterScreenShare.getDisplays();
if (displays.isNotEmpty) {
  final source = displays.first;
  controller.startCapture(
    source: source,
    onData: (Uint8List frame) {
      // Handle frame data
    },
  );
}
  • onData: A callback function that receives the captured frame data as a Uint8List.
  • source: A Display object representing either a display or a window. If null, the default display is used.

4. Display Captured Screen #

ScreenShareView(controller: controller),

5. Stop Screen Capture #

controller.stopCapture();

6. Stream Captured Frames #

controller.frameStream?.listen((Uint8List frame) {
  // Process frame
});

7. Encoding Options #

final encodingOptions = EncodingOptions(type: "webp", fps: 30, quality: 0.9);
controller.startCapture(source: source, options: encodingOptions);

Available Methods #

Method Description
FlutterScreenShare.startCapture([Display? source, EncodingOptions? options]) Starts screen capture
FlutterScreenShare.getStream() Returns a stream of captured frames
FlutterScreenShare.stopCapture() Stops screen capture
FlutterScreenShare.getDisplays() Returns available displays
FlutterScreenShare.getSources() Returns available sources (displays and windows)
ScreenShareController.startCaptureWithDialog(context, onData) Starts capture with a selection dialog
ScreenShareController.startCapture(source, onData) Starts capture with a selected source
ScreenShareController.stopCapture() Stops screen capture
ScreenShareController.isSharing Indicates if sharing is active
ScreenShareController.textureId Returns the texture ID

Notes #

  • Ensure permissions are granted.
  • Works with ScreenCaptureKit (macOS 12.3+) and CGDisplayStream (earlier versions but it is marked deprecated by apple).
  • Encodes frames in WebP/JPEG.
  • The ScreenShareController manages screen sharing lifecycle.
  • The ScreenShareView renders the captured screen using Flutter's texture API.

License #

MIT License

10
likes
150
points
20
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for screen sharing on macOS using ScreenCaptureKit.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on flutter_screen_share