addInstanceMulti method

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

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) {
    final msg = '[UseModel] ERROR: Config with ID "${config.id}" already exists in _configs. This should not happen.';
    print(msg);
  }

  // ✅ 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?
}