diff --git a/lib/common/widgets/segment_progress_bar.dart b/lib/common/widgets/segment_progress_bar.dart index 0d10586d..8ec7e40f 100644 --- a/lib/common/widgets/segment_progress_bar.dart +++ b/lib/common/widgets/segment_progress_bar.dart @@ -21,12 +21,10 @@ class Segment { } class SegmentProgressBar extends CustomPainter { - final double progress; final List segmentColors; - double? _defHeight; + late double _defHeight; SegmentProgressBar({ - required this.progress, required this.segmentColors, }); @@ -38,52 +36,44 @@ class SegmentProgressBar extends CustomPainter { paint.color = segmentColors[i].color; final segmentStart = segmentColors[i].start * size.width; final segmentEnd = segmentColors[i].end * size.width; - final progressEnd = progress * size.width; - if (progressEnd < segmentStart) { - break; - } - - final segmentWidth = - (progressEnd < segmentEnd ? progressEnd : segmentEnd) - segmentStart; - if (segmentWidth >= 0) { + if (segmentEnd > segmentStart || + (segmentEnd == segmentStart && segmentStart > 0)) { if (segmentColors[i].title != null) { double fontSize = 8; - TextPainter textPainter = TextPainter( - text: TextSpan( - text: segmentColors[i].title, - style: TextStyle(color: Colors.white, fontSize: fontSize), - ), - textDirection: TextDirection.ltr, - )..layout(); - _defHeight ??= textPainter.height; - double? prevStart; + TextPainter getTextPainter() => TextPainter( + text: TextSpan( + text: segmentColors[i].title, + style: TextStyle( + color: Colors.white, + fontSize: fontSize, + ), + ), + textDirection: TextDirection.ltr, + )..layout(); + + TextPainter textPainter = getTextPainter(); + if (i == 0) { + _defHeight = textPainter.height; + } + + late double prevStart; if (i != 0) { prevStart = segmentColors[i - 1].start * size.width; } - double width = i == 0 ? segmentStart : segmentStart - prevStart!; + double width = i == 0 ? segmentStart : segmentStart - prevStart; while (textPainter.width > width - 2 && fontSize >= 2) { fontSize -= 1; - textPainter = TextPainter( - text: TextSpan( - text: segmentColors[i].title, - style: TextStyle( - color: Colors.white, - fontSize: fontSize, - ), - ), - textDirection: TextDirection.ltr, - ); - textPainter.layout(); + textPainter = getTextPainter(); } if (i == 0) { canvas.drawRect( Rect.fromLTRB( 0, - -_defHeight!, + -_defHeight, size.width, 0, ), @@ -94,26 +84,26 @@ class SegmentProgressBar extends CustomPainter { canvas.drawRect( Rect.fromLTWH( segmentStart, - -_defHeight!, - segmentWidth == 0 ? 2 : segmentWidth, - size.height + _defHeight!, + -_defHeight, + segmentEnd == segmentStart ? 2 : segmentEnd - segmentStart, + size.height + _defHeight, ), paint, ); double textX = i == 0 ? (segmentStart - textPainter.width) / 2 - : (segmentStart - prevStart! - textPainter.width) / 2 + + : (segmentStart - prevStart - textPainter.width) / 2 + prevStart + 1; - double textY = -_defHeight! / 2 - textPainter.height / 2; + double textY = (-_defHeight - textPainter.height) / 2; textPainter.paint(canvas, Offset(textX, textY)); } else { canvas.drawRect( Rect.fromLTWH( segmentStart, 0, - segmentWidth == 0 ? 2 : segmentWidth, + segmentEnd == segmentStart ? 2 : segmentEnd - segmentStart, size.height, ), paint, diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 33b06608..f9b20054 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -1137,7 +1137,6 @@ class _PLVideoPlayerState extends State CustomPaint( size: Size(double.infinity, 3.5), painter: SegmentProgressBar( - progress: 1, segmentColors: plPlayerController.segmentList, ), ), @@ -1146,7 +1145,6 @@ class _PLVideoPlayerState extends State CustomPaint( size: Size(double.infinity, 3.5), painter: SegmentProgressBar( - progress: 1, segmentColors: plPlayerController.viewPointList, ), ), diff --git a/lib/plugin/pl_player/widgets/bottom_control.dart b/lib/plugin/pl_player/widgets/bottom_control.dart index 60e11eab..6588bf70 100644 --- a/lib/plugin/pl_player/widgets/bottom_control.dart +++ b/lib/plugin/pl_player/widgets/bottom_control.dart @@ -100,7 +100,6 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget { CustomPaint( size: Size(double.infinity, 3.5), painter: SegmentProgressBar( - progress: 1, segmentColors: controller!.segmentList, ), ), @@ -109,7 +108,6 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget { CustomPaint( size: Size(double.infinity, 3.5), painter: SegmentProgressBar( - progress: 1, segmentColors: controller!.viewPointList, ), ),