trimComponent method
Implementation
Widget trimComponent(){
return Center(
child: SizedBox(
height: trimmerHeight,
child: Row(
children: [
Expanded(
child: Stack(
children: [
Positioned.fill(
left: (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 ,
right: (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2,
child: thumbnailsList()
),
Positioned(
left: trimDraggedLeft.value,
right: trimDraggedRight.value,
child: Container(
height: trimmerHeight
)
),
Positioned(
left: (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 + (playerController.value.value.position.inMilliseconds / totalVideoDuration) * totalTrimmerSize,
child: Container(
width: 2.5,
color: Colors.black,
height: trimmerHeight,
)
),
Positioned(
left: (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 ,
child: Container(
color: Colors.grey.withOpacity(0.5),
width: draggedLeftTrim.value,
height: trimmerHeight
)
),
Positioned(
right: (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2,
child: Container(
color: Colors.grey.withOpacity(0.5),
width: max(0, totalTrimmerSize - draggedLeftTrim.value - draggedWidthTrim.value),
height: trimmerHeight
)
),
Positioned(
left: trimDraggedLeft.value- trimBallSize / 2,
top: (trimmerHeight - trimBallSize) / 2,
child: GestureDetector(
onPanUpdate: (details){
if(draggedLeftTrim.value + details.delta.dx >= 0){
draggedLeftTrim.value += details.delta.dx;
draggedWidthTrim.value -= details.delta.dx;
draggedWidthTrim.value = max(0, draggedWidthTrim.value);
startTrimmedDuration.value =(draggedLeftTrim.value / (totalSliderWidth.value)) * totalVideoDuration;
currentPosition.value = startTrimmedDuration.value;
endTrimmedDuration.value = ((draggedWidthTrim.value+ draggedLeftTrim.value) / (totalSliderWidth.value)) * totalVideoDuration;
trimDraggedLeft.value = min(max(draggedLeftTrim.value + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 , (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2), totalTrimmerSize + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2);
trimDraggedRight.value = min(max((getScreenWidth() - totalTrimmerSize) / 2 + totalTrimmerSize - draggedLeftTrim.value - draggedWidthTrim.value , (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2), totalTrimmerSize + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2);
trimLeftDraggedLeft.value = draggedLeftTrim.value + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 ;
}
},
onPanEnd: (details){
playerController.value.seekTo(Duration(milliseconds: startTrimmedDuration.value.toInt()));
playerController.value.play();
},
child: Container(
width: trimBallSize,
height: trimBallSize,
decoration: const BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle
),
)
)
),
Positioned(
left: trimRightDraggedLeft.value - trimBallSize / 2,
top: (trimmerHeight - trimBallSize) / 2,
child: GestureDetector(
onPanUpdate: (details) {
if(draggedLeftTrim.value + draggedWidthTrim.value + details.delta.dx <= totalTrimmerSize){
draggedWidthTrim.value += details.delta.dx;
draggedWidthTrim.value = max(0, draggedWidthTrim.value);
endTrimmedDuration.value = ((draggedWidthTrim.value+draggedLeftTrim.value) / (totalSliderWidth.value)) * totalVideoDuration;
trimDraggedLeft.value = min(max(draggedLeftTrim.value + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 , (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2), totalTrimmerSize + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2);
trimDraggedRight.value = min(max((getScreenWidth() - totalTrimmerSize) / 2 + totalTrimmerSize - draggedLeftTrim.value - draggedWidthTrim.value , (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2), totalTrimmerSize + (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2);
trimRightDraggedLeft.value = min(draggedLeftTrim.value +draggedWidthTrim.value+ (getScreenWidth() - totalTrimmerSize) / 2 - draggableSliderWidth / 2 + draggableSliderWidth, totalTrimmerSize + (getScreenWidth() - totalTrimmerSize) / 2 + draggableSliderWidth / 2) ;
}
},
onPanEnd: (details){
playerController.value.seekTo(Duration(milliseconds: startTrimmedDuration.value.toInt()));
playerController.value.play();
},
child: Container(
width: trimBallSize,
height: trimBallSize,
decoration: const BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle
),
)
)
),
],
)
)
]
)
)
);
}