trimComponent method

Widget trimComponent()

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