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

View File

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

View File

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