process method

Future<void> process({
  1. VoidCallback? onComplete,
  2. VoidCallback? onInterrupted,
})

Starts processing the sentence queue.

  • Sentences are interpreted one by one
  • Will pause if user interaction is required
  • Automatically completes and resets if queue is done

Implementation

Future<void> process({
  VoidCallback? onComplete,
  VoidCallback? onInterrupted,
}) async {
  if (_status == ProcessingStatus.processing) return;

  _updateStatus(ProcessingStatus.processing);

  while (_queue.isNotEmpty) {
    if (_status == ProcessingStatus.cancelled) {
      _handleInterruption(onInterrupted);
      return;
    }

    while (_status == ProcessingStatus.paused) {
      await Future.delayed(const Duration(milliseconds: 200));
    }

    final current = _queue.removeFirst();
    _processingIndex++;
    onProcessingIndexChanged?.call(_processingIndex);

    if (interpreter != null) {
      await interpreter!.interpret(current);
    }

    _notifySentencesChanged();
  }

  _finish(onComplete);
}