opt: video page v

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-02-27 10:56:26 +08:00
parent 72e7f0aa9f
commit 6a9795f561
3 changed files with 266 additions and 269 deletions

View File

@@ -2088,7 +2088,7 @@ class VideoDetailController extends GetxController
@override
void onClose() {
tabCtr.dispose();
if (Get.currentRoute.startsWith('/videoV')) {
if (GStorage.collapsibleVideoPage) {
scrollCtr.removeListener(scrollListener);
scrollCtr.dispose;
animationController.dispose();
@@ -2101,7 +2101,7 @@ class VideoDetailController extends GetxController
videoUrl = null;
audioUrl = null;
if (Get.currentRoute.startsWith('/videoV') && scrollRatio.value != 0) {
if (GStorage.collapsibleVideoPage && scrollRatio.value != 0) {
scrollRatio.refresh();
}

View File

@@ -111,7 +111,7 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
parent: ClampingScrollPhysics(),
)
: const AlwaysScrollableScrollPhysics(),
// key: const PageStorageKey<String>('评论'),
key: const PageStorageKey<String>('评论'),
slivers: <Widget>[
SliverPersistentHeader(
pinned: false,

View File

@@ -254,11 +254,15 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
videoDetailController.scrollCtr.offset /
videoDetailController.videoHeight);
} else {
if (videoDetailController.scrollKey.currentState?.mounted == true) {
videoDetailController.scrollKey.currentState?.setState(() {});
}
}
} else {
if (videoDetailController.scrollKey.currentState?.mounted == true) {
videoDetailController.scrollKey.currentState?.setState(() {});
}
}
} catch (e) {
debugPrint('handle playe status: $e');
}
@@ -644,9 +648,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
),
),
),
body: Builder(
builder: (context) {
return ExtendedNestedScrollView(
body: ExtendedNestedScrollView(
key: videoDetailController.scrollKey,
physics: const NeverScrollableScrollPhysics(
parent: ClampingScrollPhysics(),
@@ -660,8 +662,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
videoDetailController.isCollapsing
? animHeight
: videoDetailController.isCollapsing ||
plPlayerController
?.playerStatus.status.value ==
plPlayerController?.playerStatus.status.value ==
PlayerStatus.playing
? videoDetailController.minVideoHeight
: kToolbarHeight;
@@ -669,15 +670,22 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
videoDetailController.animationController.value == 1) {
videoDetailController.isExpanding = false;
WidgetsBinding.instance.addPostFrameCallback((_) {
if (videoDetailController.scrollKey.currentState?.mounted ==
true) {
videoDetailController.scrollRatio.value = 0;
videoDetailController.scrollKey.currentState
?.setState(() {});
}
});
} else if (videoDetailController.isCollapsing &&
videoDetailController.animationController.value == 1) {
videoDetailController.isCollapsing = false;
WidgetsBinding.instance.addPostFrameCallback((_) {
if (videoDetailController.scrollKey.currentState?.mounted ==
true) {
videoDetailController.scrollKey.currentState
?.setState(() {});
}
});
}
return height;
@@ -728,9 +736,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
Orientation.landscape ||
removeSafeArea
? 0
: MediaQuery.of(context)
.padding
.top)
: MediaQuery.of(context).padding.top)
: videoDetailController.isExpanding ||
videoDetailController.isCollapsing
? animHeight
@@ -741,8 +747,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
(horizontalScreen ||
MediaQuery.of(context).orientation ==
Orientation.portrait),
onPopInvokedWithResult:
_onPopInvokedWithResult,
onPopInvokedWithResult: _onPopInvokedWithResult,
child: videoPlayer(
videoWidth,
videoDetailController.isExpanding ||
@@ -760,8 +765,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
opacity:
videoDetailController.scrollRatio.value,
child: Container(
color:
Theme.of(context).colorScheme.surface,
color: Theme.of(context).colorScheme.surface,
alignment: Alignment.topCenter,
child: SizedBox(
height: kToolbarHeight,
@@ -778,8 +782,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
child: IconButton(
tooltip: '返回',
icon: Icon(
FontAwesomeIcons
.arrowLeft,
FontAwesomeIcons.arrowLeft,
size: 15,
color: Theme.of(context)
.colorScheme
@@ -835,17 +838,14 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
),
),
);
return videoDetailController.scrollRatio.value ==
0 ||
videoDetailController.scrollCtr.offset ==
0
return videoDetailController.scrollRatio.value == 0 ||
videoDetailController.scrollCtr.offset == 0
? const SizedBox.shrink()
: Positioned.fill(
bottom: -2,
child: GestureDetector(
onTap: () async {
if (videoDetailController
.isQuerying) {
if (videoDetailController.isQuerying) {
debugPrint('handlePlay: querying');
return;
}
@@ -855,12 +855,11 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
null) {
debugPrint(
'handlePlay: videoUrl/audioUrl not initialized');
videoDetailController
.queryVideoUrl();
videoDetailController.queryVideoUrl();
return;
}
videoDetailController
.scrollRatio.value = 0;
videoDetailController.scrollRatio.value =
0;
if (plPlayerController == null) {
handlePlay();
} else {
@@ -919,8 +918,6 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
],
),
),
);
},
),
),
);