mod: sync flip/onlyPlayAudio from orz12/main

Closes #100

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-01-06 16:15:55 +08:00
parent 3d803cce9f
commit 5001f3b6d2
5 changed files with 128 additions and 33 deletions

View File

@@ -165,6 +165,9 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
Icons.shield_outlined,
size:
MediaQuery.textScalerOf(context).scale(16),
color: Theme.of(context)
.colorScheme
.onSecondaryContainer,
),
Icon(
Icons.play_arrow_rounded,

View File

@@ -99,20 +99,24 @@ class MenuRow extends StatelessWidget {
class ActionRowLineItem extends StatelessWidget {
const ActionRowLineItem({
super.key,
this.selectStatus,
required this.selectStatus,
this.onTap,
this.text,
this.loadingStatus = false,
this.iconData,
this.icon,
});
final bool? selectStatus;
final bool selectStatus;
final Function? onTap;
final bool? loadingStatus;
final String? text;
final IconData? iconData;
final Widget? icon;
@override
Widget build(BuildContext context) {
return Material(
color: selectStatus!
color: selectStatus
? Theme.of(context).colorScheme.secondaryContainer
: Colors.transparent,
borderRadius: const BorderRadius.all(Radius.circular(30)),
@@ -127,7 +131,7 @@ class ActionRowLineItem extends StatelessWidget {
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(30)),
border: Border.all(
color: selectStatus!
color: selectStatus
? Colors.transparent
: Theme.of(context).colorScheme.secondaryContainer,
),
@@ -135,6 +139,16 @@ class ActionRowLineItem extends StatelessWidget {
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (iconData != null)
Icon(
iconData,
size: 13,
color: selectStatus
? Theme.of(context).colorScheme.onSecondaryContainer
: Theme.of(context).colorScheme.outline,
)
else if (icon != null)
icon!,
AnimatedOpacity(
opacity: loadingStatus! ? 0 : 1,
duration: const Duration(milliseconds: 200),
@@ -142,7 +156,7 @@ class ActionRowLineItem extends StatelessWidget {
text!,
style: TextStyle(
fontSize: 13,
color: selectStatus!
color: selectStatus
? Theme.of(context).colorScheme.onSecondaryContainer
: Theme.of(context).colorScheme.outline),
),

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'package:PiliPalaX/common/widgets/self_sized_horizontal_list.dart';
import 'package:PiliPalaX/pages/setting/widgets/switch_item.dart';
import 'package:PiliPalaX/utils/extension.dart';
import 'package:PiliPalaX/utils/id_utils.dart';
@@ -230,24 +231,71 @@ class _HeaderControlState extends State<HeaderControl> {
}
},
),
ListTile(
dense: true,
onTap: () {
Get.back();
Player? player =
widget.controller.videoPlayerController;
if (player == null) {
SmartDialog.showToast('播放器未初始化');
return;
}
var pp = player.platform as NativePlayer;
pp.setProperty("video", "no");
SelfSizedHorizontalList(
itemCount: 4,
gapSize: 10,
padding: const EdgeInsets.symmetric(horizontal: 16),
childBuilder: (index) {
return switch (index) {
0 => Obx(
() => ActionRowLineItem(
iconData: Icons.flip,
onTap: () {
widget.controller.flipX.value =
!widget.controller.flipX.value;
},
text: " 左右翻转 ",
selectStatus: widget.controller.flipX.value,
),
),
1 => Obx(
() => ActionRowLineItem(
icon: Transform.rotate(
angle: pi / 2,
child: Icon(
Icons.flip,
size: 13,
color: widget.controller.flipY.value
? Theme.of(context)
.colorScheme
.onSecondaryContainer
: Theme.of(context)
.colorScheme
.outline,
),
),
onTap: () {
widget.controller.flipY.value =
!widget.controller.flipY.value;
},
text: " 上下翻转 ",
selectStatus: widget.controller.flipY.value,
),
),
2 => Obx(
() => ActionRowLineItem(
iconData: Icons.headphones,
onTap: widget.controller.setOnlyPlayAudio,
text: " 听视频 ",
selectStatus:
widget.controller.onlyPlayAudio.value,
),
),
3 => Obx(
() => ActionRowLineItem(
iconData: Icons.play_circle_outline,
onTap: widget
.controller.setContinuePlayInBackground,
text: " 后台播放 ",
selectStatus: widget.controller
.continuePlayInBackground.value,
),
),
int() => throw UnimplementedError(),
};
},
leading:
const Icon(Icons.headphones_outlined, size: 20),
title: const Text('听视频(需返回首页才能终止该状态)',
style: titleStyle),
),
ListTile(
dense: true,
onTap: () => {Get.back(), showSetVideoQa()},