handleMethodCall method

Future handleMethodCall(
  1. MethodCall call
)

Implementation

Future<dynamic> handleMethodCall(MethodCall call) async {
  final method = call.method;
  switch (method) {
    case 'changeLogLevel':
      {
        // no-op for now
        return 1;
      }
  }

  final args = call.arguments as Map<dynamic, dynamic>;
  final playerId = args['playerId'] as String;
  switch (method) {
    case 'setUrl':
      {
        final url = args['url'] as String;
        await setUrl(playerId, url);
        return 1;
      }
    case 'play':
      {
        final url = args['url'] as String;

        // TODO(luan) think about isLocal (is it needed or not)

        final volume = args['volume'] as double? ?? 1.0;
        final position = args['position'] as double? ?? 0;
        // web does not care for the `stayAwake` argument

        final player = await setUrl(playerId, url);
        player.setVolume(volume);
        player.start(position);

        return 1;
      }
    case 'getCurrentPosition':
      {
        final position = getOrCreatePlayer(playerId).player?.currentTime;
        if (position == null) {
          return null;
        }
        return (position * 1000).toInt();
      }
    case 'getDuration':
      {
        final duration = getOrCreatePlayer(playerId).player?.duration;
        if (duration == null) {
          return null;
        }
        return (duration * 1000).toInt();
      }
    case 'pause':
      {
        getOrCreatePlayer(playerId).pause();
        return 1;
      }
    case 'stop':
      {
        getOrCreatePlayer(playerId).stop();
        return 1;
      }
    case 'resume':
      {
        getOrCreatePlayer(playerId).resume();
        return 1;
      }
    case 'setVolume':
      {
        final volume = args['volume'] as double? ?? 1.0;
        getOrCreatePlayer(playerId).setVolume(volume);
        return 1;
      }
    case 'setReleaseMode':
      {
        final releaseMode = parseReleaseMode(args['releaseMode'] as String);
        getOrCreatePlayer(playerId).setReleaseMode(releaseMode);
        return 1;
      }
    case 'release':
      {
        getOrCreatePlayer(playerId).release();
        return 1;
      }
    case 'setPlaybackRate':
      {
        final rate = args['playbackRate'] as double? ?? 1.0;
        getOrCreatePlayer(playerId).setPlaybackRate(rate);
        return 1;
      }
    case 'seek':
      {
        final position = args['position'] as int? ?? 0;
        getOrCreatePlayer(playerId).seek(position);
        return 1;
      }
    default:
      throw PlatformException(
        code: 'Unimplemented',
        details:
            "The audioplayers plugin for web doesn't implement the method '$method'",
      );
  }
}