opt: videoDetail appbar
This commit is contained in:
@ -123,14 +123,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
// 流
|
// 流
|
||||||
appbarStreamListen() {
|
appbarStreamListen() {
|
||||||
appbarStream = StreamController<double>.broadcast();
|
appbarStream = StreamController<double>.broadcast();
|
||||||
_extendNestCtr.addListener(
|
_extendNestCtr.addListener(_extendNestCtrListener);
|
||||||
() {
|
|
||||||
final double offset = _extendNestCtr.position.pixels;
|
|
||||||
vdCtr.sheetHeight.value =
|
|
||||||
Get.size.height - videoHeight - statusBarHeight + offset;
|
|
||||||
appbarStream.add(offset);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 播放器状态监听
|
// 播放器状态监听
|
||||||
@ -225,6 +218,14 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
statusHeight = await StatusBarControl.getHeight;
|
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
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
shutdownTimerService.handleWaitingFinished();
|
shutdownTimerService.handleWaitingFinished();
|
||||||
@ -243,6 +244,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
appbarStream.close();
|
appbarStream.close();
|
||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
_lifecycleListener.dispose();
|
_lifecycleListener.dispose();
|
||||||
|
_extendNestCtr.removeListener(_extendNestCtrListener);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -594,6 +596,28 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget buildAppBar(BuildContext context, AsyncSnapshot<num> 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(
|
Widget childWhenDisabled = SafeArea(
|
||||||
top: MediaQuery.of(context).orientation == Orientation.portrait &&
|
top: MediaQuery.of(context).orientation == Orientation.portrait &&
|
||||||
plPlayerController?.isFullScreen.value == true,
|
plPlayerController?.isFullScreen.value == true,
|
||||||
@ -611,11 +635,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
child: StreamBuilder(
|
child: StreamBuilder(
|
||||||
stream: appbarStream.stream.distinct(),
|
stream: appbarStream.stream.distinct(),
|
||||||
initialData: 0,
|
initialData: 0,
|
||||||
builder: ((context, snapshot) {
|
builder: buildAppBar,
|
||||||
return AppBar(
|
|
||||||
backgroundColor: Colors.black,
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
body: ExtendedNestedScrollView(
|
body: ExtendedNestedScrollView(
|
||||||
@ -773,7 +793,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
builder: ((context, snapshot) {
|
builder: ((context, snapshot) {
|
||||||
return ScrollAppBar(
|
return ScrollAppBar(
|
||||||
snapshot.data!.toDouble(),
|
snapshot.data!.toDouble(),
|
||||||
() => continuePlay(),
|
continuePlay,
|
||||||
playerStatus.value,
|
playerStatus.value,
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
|
@ -34,21 +34,16 @@ class ScrollAppBar extends StatelessWidget {
|
|||||||
child: AppBar(
|
child: AppBar(
|
||||||
primary: false,
|
primary: false,
|
||||||
centerTitle: true,
|
centerTitle: true,
|
||||||
title: TextButton(
|
title: TextButton.icon(
|
||||||
onPressed: () => callback(),
|
onPressed: () => callback(),
|
||||||
child: Row(
|
label: Text(
|
||||||
mainAxisSize: MainAxisSize.min,
|
playerStatus == PlayerStatus.paused
|
||||||
children: [
|
? '继续播放'
|
||||||
const Icon(Icons.play_arrow_rounded),
|
: playerStatus == PlayerStatus.completed
|
||||||
Text(
|
? '重新播放'
|
||||||
playerStatus == PlayerStatus.paused
|
: '播放中',
|
||||||
? '继续播放'
|
|
||||||
: playerStatus == PlayerStatus.completed
|
|
||||||
? '重新播放'
|
|
||||||
: '播放中',
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
|
icon: const Icon(Icons.play_arrow_rounded),
|
||||||
),
|
),
|
||||||
// actions: [
|
// actions: [
|
||||||
// IconButton(
|
// IconButton(
|
||||||
|
Reference in New Issue
Block a user