refa: segment progressbar

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-01-18 22:21:48 +08:00
parent 395893fc7d
commit 68464e4e34
6 changed files with 464 additions and 296 deletions

View File

@@ -838,7 +838,11 @@ class VideoDetailController extends GetxController
segmentList.map((e) {
double start = (e.segment.first / duration).clamp(0.0, 1.0);
double end = (e.segment.second / duration).clamp(0.0, 1.0);
return Segment(start, end, _getColor(e.segmentType));
return Segment(
start: start,
end: end,
color: _getColor(e.segmentType),
);
}),
);
@@ -1453,7 +1457,7 @@ class VideoDetailController extends GetxController
late final Map<int, String> vttSubtitles = {};
late final RxInt vttSubtitlesIndex = (-1).obs;
late final RxBool showVP = true.obs;
late final RxList<Segment> viewPointList = <Segment>[].obs;
late final RxList<ViewPointSegment> viewPointList = <ViewPointSegment>[].obs;
// 设定字幕轨道
Future<void> setSubtitle(int index) async {
@@ -1575,14 +1579,13 @@ class VideoDetailController extends GetxController
0.0,
1.0,
);
return Segment(
start,
start,
Colors.black.withValues(alpha: 0.5),
item.content,
item.imgUrl,
item.from,
item.to,
return ViewPointSegment(
start: start,
end: start,
title: item.content,
url: item.imgUrl,
from: item.from,
to: item.to,
);
}).toList();
} catch (_) {}

View File

@@ -100,7 +100,7 @@ class _ViewPointsPageState extends State<ViewPointsPage>
),
itemCount: videoDetailController.viewPointList.length,
itemBuilder: (context, index) {
Segment segment = videoDetailController.viewPointList[index];
final segment = videoDetailController.viewPointList[index];
if (currentIndex == -1 && segment.from != null && segment.to != null) {
final positionSeconds =
videoDetailController.plPlayerController.positionSeconds.value;
@@ -122,7 +122,7 @@ class _ViewPointsPageState extends State<ViewPointsPage>
return child;
}
Widget _buildItem(ThemeData theme, Segment segment, bool isCurr) {
Widget _buildItem(ThemeData theme, ViewPointSegment segment, bool isCurr) {
final theme = Theme.of(context);
return Material(
type: MaterialType.transparency,