handleMethodCall method

Future handleMethodCall(
  1. MethodCall call
)

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',
      );
  }
}