Home
API Reference
Event System
Event System
Complete reference for IAppPlayer's event system, including all event types and their parameters.
Event Overview
The IAppPlayer event system provides comprehensive feedback about player state changes, user interactions, and errors. All events are delivered through the eventListener callback specified when creating the player.
IAppPlayerEvent Structure
class IAppPlayerEvent {
final IAppPlayerEventType iappPlayerEventType ;
final Map <String , dynamic >? parameters ;
}
Each event contains:
iappPlayerEventType - The type of event that occurred
parameters - Optional map containing event-specific data
Event Types
Lifecycle Events
Event Type
Description
Parameters
When Triggered
initialized
Player is ready to play
-
After video metadata is loaded
setupDataSource
Data source is being set up
dataSource: IAppPlayerDataSource
When switching videos or playlists
finished
Video playback completed
-
When video reaches the end
Playback Events
Event Type
Description
Parameters
When Triggered
play
Playback started
-
When play() is called
pause
Playback paused
-
When pause() is called
seekTo
Seek operation performed
duration: Duration
When seekTo() is called
progress
Playback progress update
progress: Duration
duration: Duration
Every 500ms during playback
setVolume
Volume changed
volume: double (0.0-1.0)
When setVolume() is called
setSpeed
Playback speed changed
speed: double
When setSpeed() is called
Note:
The progress event is throttled to fire at most once every 500ms to prevent performance issues.
Buffering Events
Event Type
Description
Parameters
When Triggered
bufferingStart
Buffering started
-
When player starts buffering
bufferingEnd
Buffering completed
-
When buffering finishes
bufferingUpdate
Buffer progress update
buffered: List<Duration>
When buffer state changes
Control Events
Event Type
Description
Parameters
When Triggered
changedSubtitles
Subtitle source changed
subtitlesSource: IAppPlayerSubtitlesSource
When subtitle is switched
changedTrack
Video track changed
track: IAppPlayerAsmsTrack
When HLS track is switched
changedAudioTrack
Audio track changed
audioTrack: IAppPlayerAsmsAudioTrack
When audio track is switched
changedResolution
Resolution changed
url: String
When quality is switched
UI Events
Event Type
Description
Parameters
When Triggered
openFullscreen
Entered fullscreen mode
-
When entering fullscreen
hideFullscreen
Exited fullscreen mode
-
When exiting fullscreen
pipStart
Entered picture-in-picture
-
When PiP starts
pipStop
Exited picture-in-picture
-
When PiP stops
controlsVisible
Controls became visible
-
When controls show
controlsHiddenStart
Controls start hiding
-
When controls begin to hide
controlsHiddenEnd
Controls fully hidden
-
When controls are hidden
changedPlayerVisibility
Player visibility changed
visible: bool
When player visibility changes
Playlist Events
Event Type
Description
Parameters
When Triggered
changedPlaylistItem
Playlist item changed
index: int
When switching playlist videos
togglePlaylistShuffle
Shuffle toggle triggered
-
When shuffle button clicked
changedPlaylistShuffle
Shuffle mode changed
shuffleMode: bool
When shuffle state changes
Error Handling
Exception Event
Event Type
Description
Parameters
exception
An error occurred during playback
exception: String (error message)
Common Error Types
Error Type
Description
Handling Suggestion
PlatformException
Platform-specific error
Check device compatibility, try different decoder
FormatException
Unsupported video format
Convert video format or use different source
NetworkException
Network error (403/404/timeout)
Check network connection and URL validity
DrmException
DRM-related error
Check DRM configuration and license
UnknownException
Unknown error
Check detailed error message and retry
Event Examples
Complete Event Handler
// Complete event handler example
eventListener: (IAppPlayerEvent event) {
switch (event.iappPlayerEventType) {
// Lifecycle events
case IAppPlayerEventType.initialized:
print('Player initialized');
final duration = result.activeController?.videoPlayerController?.value.duration;
print('Total duration: ${duration?.inSeconds} seconds');
break;
case IAppPlayerEventType.play:
print('Started playing');
break;
case IAppPlayerEventType.pause:
print('Paused');
break;
case IAppPlayerEventType.progress:
final progress = event.parameters?['progress'] as Duration?;
final duration = event.parameters?['duration'] as Duration?;
if (progress != null && duration != null) {
final percent = (progress.inSeconds / duration.inSeconds * 100).toStringAsFixed(1);
print('Progress: $percent%');
}
break;
case IAppPlayerEventType.bufferingStart:
print('Buffering...');
break;
case IAppPlayerEventType.bufferingEnd:
print('Buffering complete');
break;
case IAppPlayerEventType.finished:
print('Playback finished');
break;
case IAppPlayerEventType.exception:
final error = event.parameters?['exception'];
print('Playback error: $error');
break;
case IAppPlayerEventType.openFullscreen:
print('Entered fullscreen');
break;
case IAppPlayerEventType.hideFullscreen:
print('Exited fullscreen');
break;
case IAppPlayerEventType.changedPlaylistItem:
final index = event.parameters?['index'] as int?;
print('Switched to playlist item ${index! + 1}');
break;
case IAppPlayerEventType.changedPlaylistShuffle:
final shuffleMode = event.parameters?['shuffleMode'] as bool?;
print('Shuffle mode: ${shuffleMode ? "On" : "Off"}');
break;
case IAppPlayerEventType.changedAudioTrack:
final audioTrack = event.parameters?['audioTrack'] as IAppPlayerAsmsAudioTrack?;
print('Audio track changed: ${audioTrack?.label} (${audioTrack?.language})');
break;
default:
break;
}
}
Best Practices
Recommended
Always handle the exception event
Use progress event for UI updates (already throttled)
Check event parameters for null before use
Implement retry logic for network errors
Track buffering events for analytics
Avoid
Don't perform heavy operations in event handlers
Don't ignore error events
Don't assume event order (except lifecycle)
Don't call setState() directly without checking mounted
Don't forget to handle playlist-specific events