handleMetronomeMethodCall method

Future handleMetronomeMethodCall(
  1. MethodCall call
)

Implementation

Future<dynamic> handleMetronomeMethodCall(MethodCall call) async {
  final args = call.arguments as Map<Object?, Object?>;
  final playerId = args['playerId'] as String?;

  switch (call.method) {
    case 'clearAll':
      for (final m in _metronomes.values) { m.dispose(); }
      _metronomes.clear();
      return null;

    case 'start':
      if (playerId == null) return null;
      final bpm = (args['bpm'] as num).toDouble();
      final beatsPerBar = args['beatsPerBar'] as int;
      final click = args['click'] as Uint8List;
      final accent = args['accent'] as Uint8List;
      final metro = _getOrCreateMetronome(playerId);
      await metro.start(bpm, beatsPerBar, click, accent);
      return null;

    case 'stop':
      _metronomes[playerId]?.stop();
      return null;

    case 'setBpm':
      final bpm = (args['bpm'] as num).toDouble();
      _metronomes[playerId]?.setBpm(bpm);
      return null;

    case 'setBeatsPerBar':
      final beatsPerBar = args['beatsPerBar'] as int;
      _metronomes[playerId]?.setBeatsPerBar(beatsPerBar);
      return null;

    case 'setVolume':
      final volume = (args['volume'] as num).toDouble();
      _metronomes[playerId]?.setVolume(volume);
      return null;

    case 'setPan':
      final pan = (args['pan'] as num).toDouble();
      _metronomes[playerId]?.setPan(pan);
      return null;

    case 'dispose':
      _metronomes.remove(playerId)?.dispose();
      return null;

    default:
      throw PlatformException(
        code: 'Unimplemented',
        details: 'Method ${call.method} not implemented',
      );
  }
}