loadSubtitle method
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));
},
);
}