codifyiq_audio_message
A chat-style audio message player with play/pause, a scrubbable progress bar, and a duration
readout. Playback is driven through a pluggable AudioPlayerBackend interface, which defaults
to a just_audio binding but can be swapped for testing
or unsupported platforms.
Installation
dependencies:
codifyiq_audio_message: ^2.0.0
Usage
import 'package:codifyiq_audio_message/codifyiq_audio_message.dart';
AudioMessageWidget(
source: AudioMessageSource.uri(Uri.parse('https://example.com/clip.m4a')),
// Shown until the clip loads, if you know it.
duration: const Duration(seconds: 42),
);
AudioMessageSource also has .file for local files and .asset for bundled assets, and
.uri takes HTTP headers for private storage (ignored on the web, where browsers don't allow
them).
Lists of messages
On its own, each player has its own controller, which stops when the player is disposed. In a
chat, where off-screen messages are disposed as the list scrolls, share one
AudioMessageController owned by the screen and give each player its message's id:
final audio = AudioMessageController(); // dispose() with the screen
AudioMessageWidget(
id: message.id,
source: AudioMessageSource.uri(Uri.parse(message.source)),
duration: message.duration,
controller: audio,
);
Then starting one message stops the one that was playing, and a message keeps playing when it scrolls out of view; scrolled back, its player shows the current position.
Appearance
color sets the play button and slider, and textStyle the time readout, for example to
match a sent or received chat bubble. The error label and tooltips can be replaced for
localisation.
Playback backend
Pass a custom backend to AudioMessageController to substitute the default just_audio
binding, for example a test double.
Part of the CodifyIQ component family ยท pub.dev/publishers/codifyiq.com
Libraries
- codifyiq_audio_message
- A chat-style audio message player with a pluggable playback backend.