loadSubtitle method

Future<void> loadSubtitle({
  1. required Emitter<SubtitleState> emit,
})

Implementation

Future<void> loadSubtitle({
  required Emitter<SubtitleState> emit,
}) async {
  emit(LoadingSubtitle());
  videoPlayerController.eventStream.addListener(
    () {
      final videoPlayerPosition = videoPlayerController.position;
      if (videoPlayerPosition.inMilliseconds >
          (subtitles.subtitles.last.endTime.inMilliseconds +
              subtitleController.timeOffset)) {
        if (!isClosed) add(CompletedShowingSubtitles());
        return;
      }
      int cTime = videoPlayerPosition.inMilliseconds -
          subtitleController.timeOffset; // 校准后的当前播放时间,实际上应该校准字幕时间,但是这样可以更节省性能
      Subtitle? cSubtitleItem;
      for (final Subtitle subtitleItem in subtitles.subtitles) {
        int sTime = subtitleItem.startTime.inMilliseconds; // 字幕开始时间
        int eTime = subtitleItem.endTime.inMilliseconds; // 字幕结束时间
        if (cTime > sTime && cTime < eTime) {
          cSubtitleItem = subtitleItem;
          if (!isClosed) add(UpdateLoadedSubtitle(subtitle: cSubtitleItem));
          return; // 找到匹配的字幕后,提前结束循环
        }
      }
      if (!isClosed) add(UpdateLoadedSubtitle(subtitle: cSubtitleItem));
    },
  );
}