addInstanceMulti method

Future<void> addInstanceMulti(
  1. MultiInstanceConfig config,
  2. void callback(
    1. Map<String, dynamic>
    )
)

Adds a new KeyWordFlutterPC instance that listens to multiple models.

Implementation

Future<void> addInstanceMulti(
  MultiInstanceConfig config,
  void Function(Map<String, dynamic>) callback,
) async {
  final existingInstance = _instances[config.id];
  if (existingInstance != null) {
    // If instance exists, just start detection again
    await existingInstance.startKeywordDetection(
        config.id, config.thresholds[0]); // uses first threshold
    return;
  }

  final alreadyExists = _configs.any((c) => c.id == config.id);
  if (alreadyExists) {
    developer.log(
      'Config with ID "${config.id}" already exists in _configs.',
      name: 'flutter_wake_word',
    );
  }

  // ✅ Add config to internal list
  _configs.removeWhere((c) => c.id == config.id);
  _configs.add(InstanceConfig(
    id: config.id,
    modelName: config.modelNames.first,
    threshold: config.thresholds.first,
    bufferCnt: config.bufferCnts.first,
    sticky: config.sticky,
  ));

  // Create a new KeyWordFlutterPC instance
  final instance = createKeyWordFlutterPCInstance(
    config.id,
    isSticky: config.sticky,
  );

  await instance.createInstanceMulti(
    config.id,
    config.modelNames,
    config.thresholds,
    config.bufferCnts,
    config.msBetweenCallback,
  );

  await instance.setKeywordDetectionLicense(gLicenseKey);

  _instances[config.id] = instance;

  // Listen to detection events
  final stream = instance.onKeywordDetectionEvent();
  final listener = stream.listen(callback);
  instance.listeners.add(listener);

  // Start detection on the new instance
  await instance.startKeywordDetection(
      config.id, config.thresholds[0]); // or all?
}