From e5d3e84b612c03b70643b51140199bd7043589e6 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sun, 17 Nov 2024 14:05:04 +0800 Subject: [PATCH] opt: videoDetail appbar --- lib/pages/video/detail/view.dart | 48 +++++++++++++++------ lib/pages/video/detail/widgets/app_bar.dart | 21 ++++----- 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index 75f50b61..1585a6f3 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -123,14 +123,7 @@ class _VideoDetailPageState extends State // 流 appbarStreamListen() { appbarStream = StreamController.broadcast(); - _extendNestCtr.addListener( - () { - final double offset = _extendNestCtr.position.pixels; - vdCtr.sheetHeight.value = - Get.size.height - videoHeight - statusBarHeight + offset; - appbarStream.add(offset); - }, - ); + _extendNestCtr.addListener(_extendNestCtrListener); } // 播放器状态监听 @@ -225,6 +218,14 @@ class _VideoDetailPageState extends State statusHeight = await StatusBarControl.getHeight; } + // _extendNestCtr监听 + void _extendNestCtrListener() { + final double offset = _extendNestCtr.position.pixels; + vdCtr.sheetHeight.value = + Get.size.height - videoHeight - statusBarHeight + offset; + appbarStream.add(offset); + } + @override void dispose() { shutdownTimerService.handleWaitingFinished(); @@ -243,6 +244,7 @@ class _VideoDetailPageState extends State appbarStream.close(); WidgetsBinding.instance.removeObserver(this); _lifecycleListener.dispose(); + _extendNestCtr.removeListener(_extendNestCtrListener); super.dispose(); } @@ -594,6 +596,28 @@ class _VideoDetailPageState extends State ); } + Widget buildAppBar(BuildContext context, AsyncSnapshot snapshot) { + final double distance = + statusBarHeight + MediaQuery.of(context).padding.top; + return AppBar( + backgroundColor: Colors.black, + systemOverlayStyle: Platform.isAndroid + ? SystemUiOverlayStyle( + statusBarIconBrightness: + Theme.of(context).brightness == Brightness.dark + ? Brightness.light + : (snapshot.data! > distance + ? Brightness.dark + : Brightness.light), + ) + : Theme.of(context).brightness == Brightness.dark + ? SystemUiOverlayStyle.light + : (snapshot.data! > distance + ? SystemUiOverlayStyle.dark + : SystemUiOverlayStyle.light), + ); + } + Widget childWhenDisabled = SafeArea( top: MediaQuery.of(context).orientation == Orientation.portrait && plPlayerController?.isFullScreen.value == true, @@ -611,11 +635,7 @@ class _VideoDetailPageState extends State child: StreamBuilder( stream: appbarStream.stream.distinct(), initialData: 0, - builder: ((context, snapshot) { - return AppBar( - backgroundColor: Colors.black, - ); - }), + builder: buildAppBar, ), ), body: ExtendedNestedScrollView( @@ -773,7 +793,7 @@ class _VideoDetailPageState extends State builder: ((context, snapshot) { return ScrollAppBar( snapshot.data!.toDouble(), - () => continuePlay(), + continuePlay, playerStatus.value, null, ); diff --git a/lib/pages/video/detail/widgets/app_bar.dart b/lib/pages/video/detail/widgets/app_bar.dart index bf74ac13..6fdd72f6 100644 --- a/lib/pages/video/detail/widgets/app_bar.dart +++ b/lib/pages/video/detail/widgets/app_bar.dart @@ -34,21 +34,16 @@ class ScrollAppBar extends StatelessWidget { child: AppBar( primary: false, centerTitle: true, - title: TextButton( + title: TextButton.icon( onPressed: () => callback(), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon(Icons.play_arrow_rounded), - Text( - playerStatus == PlayerStatus.paused - ? '继续播放' - : playerStatus == PlayerStatus.completed - ? '重新播放' - : '播放中', - ) - ], + label: Text( + playerStatus == PlayerStatus.paused + ? '继续播放' + : playerStatus == PlayerStatus.completed + ? '重新播放' + : '播放中', ), + icon: const Icon(Icons.play_arrow_rounded), ), // actions: [ // IconButton(