handleMethodCall method
Implementation
Future<dynamic> handleMethodCall(MethodCall call) async {
final args = call.arguments as Map<Object?, Object?>;
final playerId = args['playerId'] as String?;
switch (call.method) {
case 'clearAll':
for (final p in _players.values) { p.dispose(); }
_players.clear();
return null;
case 'loadAsset':
if (playerId == null) return null;
final assetKey = args['assetKey'] as String;
final player = _getOrCreatePlayer(playerId);
await player.loadAsset(assetKey);
return null;
case 'load':
if (playerId == null) return null;
final path = args['path'] as String;
final player = _getOrCreatePlayer(playerId);
await player.loadUrl(path); // On web, paths are URLs
return null;
case 'loadUrl':
if (playerId == null) return null;
final url = args['url'] as String;
final player = _getOrCreatePlayer(playerId);
await player.loadUrl(url);
return null;
case 'loadFromBytes':
if (playerId == null) return null;
final bytes = args['bytes'] as Uint8List;
final player = _getOrCreatePlayer(playerId);
await player.loadData(bytes);
return null;
case 'play':
await _players[playerId]?.play();
return null;
case 'pause':
_players[playerId]?.pause();
return null;
case 'resume':
_players[playerId]?.resume();
return null;
case 'stop':
_players[playerId]?.stop();
return null;
case 'setVolume':
final volume = (args['volume'] as num).toDouble();
_players[playerId]?.setVolume(volume);
return null;
case 'setPan':
final pan = (args['pan'] as num).toDouble();
_players[playerId]?.setPan(pan);
return null;
case 'setLoopRegion':
final start = (args['start'] as num).toDouble();
final end = (args['end'] as num).toDouble();
_players[playerId]?.setLoopRegion(start, end);
return null;
case 'setCrossfadeDuration':
final duration = (args['duration'] as num).toDouble();
_players[playerId]?.setCrossfadeDuration(duration);
return null;
case 'setPlaybackRate':
final rate = (args['rate'] as num).toDouble();
_players[playerId]?.setPlaybackRate(rate);
return null;
case 'seek':
final position = (args['position'] as num).toDouble();
_players[playerId]?.seek(position);
return null;
case 'getDuration':
return _players[playerId]?.duration ?? 0.0;
case 'getCurrentPosition':
return _players[playerId]?.currentPosition ?? 0.0;
case 'dispose':
_players.remove(playerId)?.dispose();
return null;
default:
throw PlatformException(
code: 'Unimplemented',
details: 'Method ${call.method} not implemented',
);
}
}