AudioCardWrapperContext class
A stateful widget displaying audio-only participant card with animated waveform and controls.
Renders a participant tile showing:
- MiniCard avatar (image or initials)
- Animated waveform bars (9 bars, height based on audio levels)
- Name badge overlay (top-right by default)
- Mute toggle button (top-left by default)
Rendering Logic:
- If
customBuilder
provided → delegates full rendering - Else builds Stack with:
- Background Container (containerBuilder)
- Waveform overlay (overlayBuilder → waveformBuilder)
- Name badge (infoBuilder)
- Mute button (if showControls=true)
Layout Structure:
Stack (wrapperBuilder)
├─ Positioned.fill → Container (containerBuilder)
│ └─ MiniCard (avatar)
├─ Positioned.fill → Container (overlayBuilder)
│ └─ Row (waveformBuilder)
│ └─ 9 × AnimatedContainer (bars)
├─ Positioned (infoPosition) → Container (infoBuilder)
│ └─ Text (name badge)
└─ Positioned (controlsPosition) → GestureDetector
└─ Icon (mute button)
Audio Level Detection:
- Reads
parameters.audioDecibels
list to find participant's audio level - Matches by
participant.name
againstaudioDecibels[i].name
- Hides waveform if participant muted (
participant.muted == true
) - Animates bar heights based on detected audio level (0-127 range)
Mute Control Workflow:
- User taps mute button (visible if
showControls=true
) - Calls
controlUserMedia
function with:participantId
: participant.id (socket ID)participantName
: participant.nametype
: 'audio' (media type)
controlMedia
checks permissions:- Host (islevel='2') → always allowed
- CoHost with 'media' permission → allowed
- Self-mute → always allowed
- Emits socket event
'controlMedia'
to server:{ "participantId": "abc123", "participantName": "John Doe", "type": "audio" }
- Server broadcasts mute action to all clients
Waveform Animation:
- State creates 9 AnimationControllers (1 per bar)
- Effect hook polls
parameters.audioDecibels
every 2 seconds - Updates bar heights via
setState
→ triggers animations - Bars scale from 1px (silent) to 40px (loud)
- Disposed on widget unmount
Builder Hook Priorities:
customBuilder
→ full widget replacement (ignores all other props)wrapperBuilder
→ wraps Stack; receives stackChildren + defaultcontainerBuilder
→ wraps MiniCard container; receives child + defaultinfoBuilder
→ wraps name badge; receives overlay + defaultoverlayBuilder
→ wraps waveform; receives waveform + defaultwaveformBuilder
→ wraps bars; receives animationControllers + default
Common Use Cases:
-
Basic Grid Display:
GridView.builder( itemCount: audioParticipants.length, itemBuilder: (context, index) { final participant = audioParticipants[index]; return AudioCard( options: AudioCardOptions( name: participant.name, participant: participant, parameters: parameters, customStyle: BoxDecoration(color: Colors.grey[800]), ), ); }, )
-
Custom Controls Overlay:
AudioCard( options: AudioCardOptions( name: 'John Doe', participant: participant, parameters: parameters, videoControlsComponent: Row( children: [ IconButton(icon: Icon(Icons.mic_off), onPressed: muteAction), IconButton(icon: Icon(Icons.more_vert), onPressed: showMenu), ], ), ), )
-
Silent Display (No Controls):
AudioCard( options: AudioCardOptions( name: 'John Doe', participant: participant, parameters: parameters, showControls: false, showInfo: false, ), )
Override Integration:
Integrates with MediasfuUICustomOverrides
for global styling:
overrides: MediasfuUICustomOverrides(
audioCardOptions: ComponentOverride<AudioCardOptions>(
builder: (existingOptions) => AudioCardOptions(
name: existingOptions.name,
participant: existingOptions.participant,
parameters: existingOptions.parameters,
customStyle: BoxDecoration(
gradient: LinearGradient(colors: [Colors.deepPurple, Colors.purple]),
borderRadius: BorderRadius.circular(12),
),
barColor: Colors.pink,
),
),
),
Constructors
-
AudioCardWrapperContext({required BuildContext buildContext, required AudioCardOptions options, required List<
Widget> stackChildren, required Widget defaultWrapper}) -
const
Properties
- buildContext → BuildContext
-
final
- defaultWrapper → Widget
-
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- options → AudioCardOptions
-
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
stackChildren
→ List<
Widget> -
final
Methods
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited