Flutter SDK — Release Notes
embed_flutter · release history, newest first. Install the latest with flutter pub add embed_flutter; confirm the current version on pub.dev.
0.2.0
Released: September 2026
The native-parity release — config wiring, call/agent modes, back navigation, widget UX, and the action-intelligence runtime brought in line with the Android and React Native SDKs, plus an on-device UI-graph cache and a hardened no-crash guarantee for the host app. Verified live on a physical device. Upgrading from 0.0.x requires a few code changes; work through the upgrade steps below.
Breaking changes
| Change | What to do |
|---|---|
Multi-agent (flowName) removed | One integration is one agent (React / React Native parity). Drop flowName from embedInitialize / embedEvent / embedTrack*; enabledRoutes becomes a flat List<String>; per-flow groupContinuity / groupDelays collapse to continuity: / buttonDelay: (or the new buttonVisibility groups). Existing on-device caches stay valid; multi-agent apps must split into separate integrations. |
embedInitialize is the single, all-named intake | embedInitialize(apiKey: …, appVersion: …, embedUrl: …). apiKey moved from positional to a required named parameter; appVersion is now required (embedSetAppVersion() and the package_info_plus auto-derivation are gone). |
EmbedProvider removed | It only forwarded credentials and mounted an EmbedWidget. Call embedInitialize before runApp and wrap with EmbedWidget directly. |
| Host position/color props removed | Delete apiKey / embedUrl / primaryColor / rightPadding / bottomPadding / groupInsets (and EmbedButtonInset) from EmbedWidget. FAB position (widget_config.position) and colors (widget_config.colorPalette) now come from the dashboard. |
Server-driven panels/cards render only in workflow mode | A call started from the FAB (or the inactivity auto-trigger) is co-pilot and drops inbound panel frames. To keep panels, start from host code: EmbedWidget.startCall(agentTriggerMode: AgentTriggerMode.WORKFLOW). |
other_data flags removed | Move opt-outs to action_config.flags.dataCapture (snapshot/capture) and EmbedWidget(usePlatformRouteAllowlist: true) (route allowlist). |
New
AgentTriggerMode(co-pilot / workflow) — host-declared atEmbedWidget.startCall(agentTriggerMode:)and latched per call; decides who owns the UI, whether panels render, and whether the avatar surface opens. Enum valuesCO_PILOT/WORKFLOW(identifier-for-identifier with Android); cross-SDK wire string is lowercasecopilot/workflow(mode.wire/parseAgentTriggerMode(...)).- Host-crash safety net —
embedInitializeinstalls a chainedPlatformDispatcher.onErrorguard that swallows onlylivekit_client/flutter_webrtcasync errors and delegates everything else to the host's handler. Combined with type-coerced config and fully guarded timers/listeners, nothing the SDK does can crash the host app. - On-device UI-graph cache + sync — screens are captured to a durable on-disk store (one JSON file per screen) and synced to the backend, gated by the dashboard
action_config.flags.dataCapturemaster switch. - Visibility groups (
buttonVisibility) —EmbedWidget(buttonVisibility: EmbedButtonVisibilityConfig(groups: [...])); each group gives a set of screens its own FAB continuity / delay / delay-policy (first matching group wins; a group'sscreensalso join the allow-list). - New host controls —
EmbedWidget.expandWidget()(programmatic inverse ofcollapseWidget(), emitsagent_tap_to_open;startCall()does not auto-expand) andEmbedWidget.openAvatarScreen()(opens the full-screen agent surface, starting a workflow call if none is running). action_config/widget_configcoverage completed —dataCapturemaster gate;awakeningEffect/activeBorderGlow/highlighting/clickTrackingkill-switches; all 26effects.*tuning knobs;position.*andagentAvatar.avatarSizemerged;isCollapsedopening state honored once per widget lifetime.call_id— latched from/tokenand sent flat onagent_conversation_started/_ended(Android parity).- System-back rung —
backnow sweeps every reachable navigator (deepest-first,PopScope-aware), so nested / per-tab hosts no longer exhaust the find ladder.
Fixed / clarified
- Inactivity/nudge parity:
nudgeDelay <= 0= off; the popup shows only with a non-empty tooltip; captions suppress the auto-collapse and cancel a running countdown. - Widget UX: one centered expanded-bar width; awakening plays only while no call is live; collapse artifacts fixed; a silent config revalidate no longer collapses an open bar; the avatar can no longer surface on a co-pilot call.
- Memory (OOM guard): the exploration log is now call-scoped and LRU-capped to 12 screens — it can no longer grow unbounded across calls in a long-lived host process.
- No double submits: a semantic tap/navigate that fired but produced zero observable evidence now fails after one attempt; rely on the backend
failure_reason: tap_had_no_observable_effectto re-plan. - Secure fields: capture-time (sticky) redaction — typed field contents no longer ride
textor stable ids. - Config cache un-brick: cached config is versioned with TTL + revalidate, so a stale cache can no longer hide the widget for the life of the install.
Upgrade steps: 0.0.x → 0.2.0
- Bump
embed_flutterto^0.2.0inpubspec.yaml, thenflutter pub getand (iOS)pod install. Re-check platform floors in the Compatibility & Dependency Matrix. - Move credentials into
embedInitialize(named, required):embedInitialize('KEY', flowName: 'main')→embedInitialize(apiKey: 'KEY', appVersion: '1.0.0'). Delete anyembedSetAppVersion()call. - Drop
EmbedProvider— callembedInitializebeforerunAppand wrap withEmbedWidgetdirectly. - Flatten
enabledRoutes:{'main': ['home', 'account']}→['home', 'account']. - Remove host position/color props (
apiKey/embedUrl/primaryColor/rightPadding/bottomPadding/groupInsets) fromEmbedWidget; set position and colors from the dashboard. - Replace
groupContinuity/groupDelayswithcontinuity:/buttonDelay:, or model per-screen behavior withbuttonVisibilitygroups. - If you rely on server-driven panels/cards, start the call in workflow mode:
EmbedWidget.startCall(agentTriggerMode: AgentTriggerMode.WORKFLOW). - Rebuild fully and re-test a call on a real device.
0.0.20 and earlier
The pre-parity line: floating voice-agent FAB (LiveKit), flow-scoped enabledRoutes with flowName, EmbedProvider, host-side FAB positioning (rightPadding / bottomPadding), the four event keys (USER_DATA, SCREEN_STATE, CUSTOM_EVENT, ANALYTICS_DATA), FAB pre-show delays (0.0.18), and Bluetooth-headset audio fixes (0.0.20). No agent trigger modes, no UI-graph cache, no crash guard, no visibility groups. If you are still on 0.0.x, upgrade via the steps above — the 0.0.x line is not maintained.
Support
- Docs: https://docs.revrag.ai
- Email: contact@revrag.ai
- Dashboard: app.revrag.ai