Skip to main content
Build a fully customized control panel for your call interface by hiding the default controls and implementing your own UI with call actions. This guide walks you through creating a custom control panel with essential call controls.

Overview

Custom control panels allow you to:
  • Match your app’s branding and design language
  • Simplify the interface by showing only relevant controls
  • Add custom functionality and workflows
  • Create unique user experiences
This guide demonstrates building a basic custom control panel with:
  • Mute/Unmute audio button
  • Pause/Resume video button
  • Switch camera button
  • End call button

Prerequisites


Step 1: Hide Default Controls

Configure your session settings to hide the default control panel:
You can also hide individual buttons while keeping the control panel visible. See SessionSettingsBuilder for all options.

Step 2: Create Custom Widget Layout

Build a Flutter widget for your custom controls. Instead of XML layouts, Flutter uses a widget tree to compose the UI:

Step 3: Implement Control Actions

Wire up the button callbacks to call the appropriate CallSession actions:

Step 4: Handle State Updates

Use MediaEventsListener to keep your UI synchronized with the actual call state.
Flutter listeners are not lifecycle-aware. You must manually remove listeners in dispose() to prevent memory leaks.
Use SessionStatusListener to handle session end events:

Complete Example

Here’s the full implementation combining all steps: