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