Coordinates one-playing-at-a-time across many AudioMessageTile widgets
that share a single AudioPlayerAdapter. Hold one instance per logical
audio context (a chat thread, a podcast list) and pass the same instance
to every tile.
Pluggable backend for audio playback. Implement against your preferred
player package (just_audio, audioplayers, flutter_sound, etc.) so
media_pro itself stays free of audio-engine dependencies.
Pluggable backend for audio recording. Implement against your preferred
recording package (record, flutter_sound, etc.) so media_pro itself
stays free of recording-engine dependencies.
Caller-supplied widget. Receives the upload callback and the picked-file
metadata (null until a file is selected) so the rendered widget can show
empty state vs filename / size / icon.
GridVideoPicker — multi-video grid picker. Uses file_picker with
FileType.video for multi-pick. No camera support (picking multiple
videos via camera doesn't fit the multi-select UX).
Drop-in network video tile — the analogue of CachedNetworkImage for
video. Renders the poster up-front, defers player initialization until
the user taps play (or autoPlay is true), and shows a play overlay
whenever paused.
Pluggable backend for video playback. Implement against your preferred
player package (video_player, chewie, media_kit, etc.) so
media_pro itself stays free of video-engine dependencies.
Whatsapp / Telegram-style voice message recorder. Renders an idle mic
button that expands into a recording row (timer + waveform + cancel UX)
while active. All active states render at intrinsic width, so the widget
is safe to place directly in a Row alongside other flex children
without giving up bounded constraints.