loadSubtitle method
Implementation
Future<void> loadSubtitle({
required Emitter<SubtitleState> emit,
}) async {
emit(LoadingSubtitle());
videoPlayerController.addListener(
() {
final videoPlayerPosition = videoPlayerController.value.position;
if (subtitles.subtitles.isNotEmpty &&
videoPlayerPosition.inMilliseconds >
subtitles.subtitles.last.endTime.inMilliseconds) {
add(CompletedShowingSubtitles());
}
for (var i = _lastSubtitleIndex; i < subtitles.subtitles.length; i++) {
final subtitleItem = subtitles.subtitles[i];
final adjustedStartTime = subtitleItem.startTime.inMilliseconds +
subtitleController.subtitleDelay;
final adjustedEndTime = subtitleItem.endTime.inMilliseconds +
subtitleController.subtitleDelay;
final validStartTime =
videoPlayerPosition.inMilliseconds > adjustedStartTime;
final validEndTime =
videoPlayerPosition.inMilliseconds < adjustedEndTime;
final subtitle = validStartTime && validEndTime ? subtitleItem : null;
if (validStartTime && validEndTime && subtitle != _currentSubtitle) {
_currentSubtitle = subtitle;
_lastSubtitleIndex = i;
break;
} else if (!_currentSubtitleIsValid(
videoPlayerPosition: videoPlayerPosition.inMilliseconds,
)) {
_currentSubtitle = null;
}
}
add(
UpdateLoadedSubtitle(
subtitle: _currentSubtitle,
),
);
},
);
}