Skip to content
Everframe Docs
Documentation

Install

One published Flutter plugin for Android and iOS, using your Flutter integration key.

Updated

flutter pub add everframe_flutter

Create a Flutter integration in the dashboard. Use its app ID and SDK key on either host:

import 'package:everframe_flutter/everframe_flutter.dart';

final everframe = EverframeNativeBridge();
await everframe.start(
  appId: '<Flutter integration app ID>',
  sdkKey: '<Flutter integration SDK key>',
  environment: 'production',
);

Wrap the Flutter content to capture in a RepaintBoundary and mark every private widget with EverframeSensitive. Pass the same boundary key and SensitiveRegionRegistry to openReporter from your own button:

await everframe.openReporter(
  boundaryKey: boundaryKey,
  sensitiveRegions: sensitiveRegions,
);

The capture is rejected when masking geometry or a safe screenshot is unavailable. It does not require screen-recording permission.

Host requirements

Flutter 3.47+ and Dart 3.13+ are required. Android needs API 24+, FlutterFragmentActivity for the Compose reporter, and the INTERNET permission in release builds. iOS needs iOS 15+. The plugin brings native Everframe 1.2 on both: Gradle on Android, CocoaPods or Swift Package Manager on iOS. Customer apps install the pub.dev package without a local SDK checkout or development endpoint override.

See Configuration for replay, explicit Dart context, and capture limits.

Flutter web

The Flutter plugin includes a web target. It uses EverframeWebCapture to sample the Flutter RepaintBoundary and mask registered sensitive widgets, then EverframeWebBridge to open the browser reporter with the same Flutter integration key. The browser host bundles @everframe/web and loads the plugin’s assets/visual_capture.js; the native MethodChannel is not used.

final capture = EverframeWebCapture(
  boundaryKey: boundaryKey,
  sensitiveRegions: sensitiveRegions,
);
WidgetsBinding.instance.addPostFrameCallback((_) {
  capture.install();
  unawaited(const EverframeWebBridge().start(
    sdkKey: flutterIntegrationKey,
    appVersion: '1.0.0',
  ));
});

Use the complete browser host example for the JavaScript initializer and asset setup. The host must register sensitive widgets before capture; a screen with none needs an explicit allowUnmarked opt-in. This path needs no screen-recording permission. The masked screenshot, replay, reporter, and retry paths passed Chromium probes.

See also: a worked run on an Android emulator, from the capture boundary to the report in the dashboard.