getIndexByProgress method

int getIndexByProgress(
  1. Duration progress
)

Implementation

int getIndexByProgress(Duration progress) {
  final model = lyricNotifier.value;
  if (model == null) {
    return 0;
  }
  progress += Duration(milliseconds: _lyricOffset);
  int left = 0;
  final lines = model.lines;
  int right = lines.length - 1;
  int result = -1;

  while (left <= right) {
    int mid = left + ((right - left) >> 1);
    if (progress == lines[mid].start) {
      return mid;
    } else if (progress < lines[mid].start) {
      right = mid - 1;
    } else {
      result = mid;
      left = mid + 1;
    }
  }
  return result < 0 ? 0 : result;
}