cutOutClipRange method
Removes fileStart..fileEnd (file time) from clip index, keeping
what lies before and after as two clips. One undo step. Returns false
when nothing changed.
Implementation
bool cutOutClipRange(int index, Duration fileStart, Duration fileEnd) {
if (index < 0 || index >= clips.length) return false;
final clip = clips[index];
if (clip.isImage || fileEnd <= fileStart) return false;
final start = clip.startTime ?? Duration.zero;
final end = clip.endTime ?? clip.duration;
final a = fileStart < start ? start : fileStart;
final b = fileEnd > end ? end : fileEnd;
if (b <= a) return false;
const minPiece = Duration(milliseconds: 100);
final keepBefore = a - start >= minPiece;
final keepAfter = end - b >= minPiece;
if (!keepBefore && !keepAfter) {
removeClip(index);
return true;
}
if (keepBefore) {
clipController.updateClipTrim(index, start, a);
if (keepAfter) {
clipController.insertClip(
index + 1,
clip.copyWith(
id: '${clip.id}_cut_${DateTime.now().microsecondsSinceEpoch}',
startTime: b,
endTime: end,
)..markEdited(),
);
}
} else {
clipController.updateClipTrim(index, b, end);
}
_activeTrack = VideoTrackType.clip;
if (_currentGlobalTime.value > totalDuration) {
_currentGlobalTime.value = totalDuration;
}
_saveState();
notifyListeners();
_updateVideoPlayerForCurrentClip();
return true;
}