mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
feat: seek from viewpoint
Closes #153 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -75,7 +75,7 @@ class SegmentProgressBar extends CustomPainter {
|
|||||||
canvas.drawRect(
|
canvas.drawRect(
|
||||||
Rect.fromLTRB(
|
Rect.fromLTRB(
|
||||||
0,
|
0,
|
||||||
-_defHeight,
|
-_defHeight - 2,
|
||||||
size.width,
|
size.width,
|
||||||
0,
|
0,
|
||||||
),
|
),
|
||||||
@@ -86,9 +86,9 @@ class SegmentProgressBar extends CustomPainter {
|
|||||||
canvas.drawRect(
|
canvas.drawRect(
|
||||||
Rect.fromLTWH(
|
Rect.fromLTWH(
|
||||||
segmentStart,
|
segmentStart,
|
||||||
-_defHeight,
|
-_defHeight - 2,
|
||||||
segmentEnd == segmentStart ? 2 : segmentEnd - segmentStart,
|
segmentEnd == segmentStart ? 2 : segmentEnd - segmentStart,
|
||||||
size.height + _defHeight,
|
size.height + _defHeight + 2,
|
||||||
),
|
),
|
||||||
paint,
|
paint,
|
||||||
);
|
);
|
||||||
@@ -98,7 +98,7 @@ class SegmentProgressBar extends CustomPainter {
|
|||||||
: (segmentStart - prevStart - textPainter.width) / 2 +
|
: (segmentStart - prevStart - textPainter.width) / 2 +
|
||||||
prevStart +
|
prevStart +
|
||||||
1;
|
1;
|
||||||
double textY = (-_defHeight - textPainter.height) / 2;
|
double textY = (-_defHeight - textPainter.height) / 2 - 1;
|
||||||
textPainter.paint(canvas, Offset(textX, textY));
|
textPainter.paint(canvas, Offset(textX, textY));
|
||||||
} else {
|
} else {
|
||||||
canvas.drawRect(
|
canvas.drawRect(
|
||||||
|
|||||||
@@ -2001,7 +2001,7 @@ class VideoDetailController extends GetxController
|
|||||||
return Segment(
|
return Segment(
|
||||||
start,
|
start,
|
||||||
start,
|
start,
|
||||||
Colors.black87,
|
Colors.black.withOpacity(0.5),
|
||||||
item?['content'],
|
item?['content'],
|
||||||
item?['imgUrl'],
|
item?['imgUrl'],
|
||||||
item?['from'],
|
item?['from'],
|
||||||
|
|||||||
@@ -1052,6 +1052,37 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
|
|||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: Alignment.bottomCenter,
|
alignment: Alignment.bottomCenter,
|
||||||
children: [
|
children: [
|
||||||
|
if (plPlayerController.viewPointList.isNotEmpty &&
|
||||||
|
plPlayerController.showVP.value)
|
||||||
|
LayoutBuilder(
|
||||||
|
builder: (context, constraints) {
|
||||||
|
return SizedBox(
|
||||||
|
height: 20,
|
||||||
|
child: Listener(
|
||||||
|
behavior: HitTestBehavior.translucent,
|
||||||
|
onPointerDown: (event) {
|
||||||
|
try {
|
||||||
|
double seg = event.localPosition.dx /
|
||||||
|
constraints.maxWidth;
|
||||||
|
Segment item = plPlayerController
|
||||||
|
.viewPointList
|
||||||
|
.where((item) {
|
||||||
|
return item.start >= seg;
|
||||||
|
}).reduce((a, b) =>
|
||||||
|
a.start < b.start ? a : b);
|
||||||
|
if (item.from != null) {
|
||||||
|
plPlayerController.seekTo(
|
||||||
|
Duration(seconds: item.from!));
|
||||||
|
}
|
||||||
|
// debugPrint('${item.title},,${item.from}');
|
||||||
|
} catch (e) {
|
||||||
|
debugPrint('$e');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
ProgressBar(
|
ProgressBar(
|
||||||
progress: Duration(seconds: value),
|
progress: Duration(seconds: value),
|
||||||
buffered: Duration(seconds: buffer),
|
buffered: Duration(seconds: buffer),
|
||||||
|
|||||||
@@ -52,6 +52,37 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: Alignment.bottomCenter,
|
alignment: Alignment.bottomCenter,
|
||||||
children: [
|
children: [
|
||||||
|
if (controller?.viewPointList.isNotEmpty == true &&
|
||||||
|
controller?.showVP.value == true)
|
||||||
|
LayoutBuilder(
|
||||||
|
builder: (context, constraints) {
|
||||||
|
return Container(
|
||||||
|
height: 20,
|
||||||
|
margin: const EdgeInsets.only(bottom: 5.25),
|
||||||
|
child: Listener(
|
||||||
|
behavior: HitTestBehavior.translucent,
|
||||||
|
onPointerDown: (event) {
|
||||||
|
try {
|
||||||
|
double seg = event.localPosition.dx /
|
||||||
|
constraints.maxWidth;
|
||||||
|
Segment? item = controller?.viewPointList
|
||||||
|
.where((item) {
|
||||||
|
return item.start >= seg;
|
||||||
|
}).reduce((a, b) =>
|
||||||
|
a.start < b.start ? a : b);
|
||||||
|
if (item?.from != null) {
|
||||||
|
controller?.seekTo(
|
||||||
|
Duration(seconds: item!.from!));
|
||||||
|
}
|
||||||
|
// debugPrint('${item?.title},,${item?.from}');
|
||||||
|
} catch (e) {
|
||||||
|
debugPrint('$e');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
ProgressBar(
|
ProgressBar(
|
||||||
progress: Duration(seconds: value),
|
progress: Duration(seconds: value),
|
||||||
buffered: Duration(seconds: buffer),
|
buffered: Duration(seconds: buffer),
|
||||||
|
|||||||
Reference in New Issue
Block a user