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.