mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-08-01 08:20:14 +08:00
opt action item
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import 'dart:async';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:PiliPlus/common/constants.dart';
|
||||
@@ -44,25 +43,17 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
AutomaticKeepAliveClientMixin,
|
||||
SingleTickerProviderStateMixin,
|
||||
TripleAnimMixin {
|
||||
late PgcIntroController pgcIntroController;
|
||||
@override
|
||||
late PgcIntroController introController;
|
||||
late VideoDetailController videoDetailCtr;
|
||||
|
||||
bool isProcessing = false;
|
||||
Future<void> handleState(FutureOr Function() action) async {
|
||||
if (!isProcessing) {
|
||||
isProcessing = true;
|
||||
await action();
|
||||
isProcessing = false;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
pgcIntroController = Get.put(PgcIntroController(), tag: widget.heroTag);
|
||||
introController = Get.put(PgcIntroController(), tag: widget.heroTag);
|
||||
videoDetailCtr = Get.find<VideoDetailController>(tag: widget.heroTag);
|
||||
}
|
||||
|
||||
@@ -70,7 +61,7 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
final ThemeData theme = Theme.of(context);
|
||||
final item = pgcIntroController.pgcItem;
|
||||
final item = introController.pgcItem;
|
||||
final isLandscape = context.isLandscape;
|
||||
Widget sliver = SliverToBoxAdapter(
|
||||
child: Column(
|
||||
@@ -86,22 +77,21 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
// 点赞收藏转发 布局样式2
|
||||
if (pgcIntroController.isPgc)
|
||||
actionGrid(theme, item, pgcIntroController),
|
||||
if (introController.isPgc) actionGrid(theme, item, introController),
|
||||
// 番剧分集
|
||||
if (item.episodes?.isNotEmpty == true)
|
||||
PgcPanel(
|
||||
heroTag: widget.heroTag,
|
||||
pages: item.episodes!,
|
||||
cid: videoDetailCtr.cid.value,
|
||||
onChangeEpisode: pgcIntroController.onChangeEpisode,
|
||||
onChangeEpisode: introController.onChangeEpisode,
|
||||
showEpisodes: widget.showEpisodes,
|
||||
newEp: item.newEp,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
if (!pgcIntroController.isPgc) {
|
||||
if (!introController.isPgc) {
|
||||
sliver = SliverMainAxisGroup(
|
||||
slivers: [
|
||||
sliver,
|
||||
@@ -181,18 +171,18 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
bottom: 6,
|
||||
left: null,
|
||||
),
|
||||
if (!pgcIntroController.isPgc)
|
||||
if (!introController.isPgc)
|
||||
Positioned(
|
||||
right: 6,
|
||||
bottom: 6,
|
||||
child: Obx(() {
|
||||
final isFav = pgcIntroController.isFav.value;
|
||||
final isFav = introController.isFav.value;
|
||||
return iconButton(
|
||||
context: context,
|
||||
size: 28,
|
||||
iconSize: 26,
|
||||
tooltip: '${isFav ? '取消' : ''}收藏',
|
||||
onPressed: () => pgcIntroController.onFavPugv(isFav),
|
||||
onPressed: () => introController.onFavPugv(isFav),
|
||||
icon: isFav ? Icons.star_rounded : Icons.star_border_rounded,
|
||||
bgColor: isFav ? null : theme.colorScheme.onInverseSurface,
|
||||
iconColor: isFav ? null : theme.colorScheme.onSurfaceVariant,
|
||||
@@ -204,11 +194,11 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
}
|
||||
|
||||
Widget _buildInfoPanel(bool isLandscape, ThemeData theme, PgcInfoModel item) {
|
||||
if (pgcIntroController.isPgc) {
|
||||
if (introController.isPgc) {
|
||||
Widget subBtn() => Obx(
|
||||
() {
|
||||
final isFollowed = pgcIntroController.isFollowed.value;
|
||||
final followStatus = pgcIntroController.followStatus.value;
|
||||
final isFollowed = introController.isFollowed.value;
|
||||
final followStatus = introController.followStatus.value;
|
||||
return FilledButton.tonal(
|
||||
style: FilledButton.styleFrom(
|
||||
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||||
@@ -228,26 +218,26 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
if (isFollowed) {
|
||||
showPgcFollowDialog(
|
||||
context: context,
|
||||
type: pgcIntroController.pgcType,
|
||||
type: introController.pgcType,
|
||||
followStatus: followStatus,
|
||||
onUpdateStatus: (followStatus) {
|
||||
if (followStatus == -1) {
|
||||
pgcIntroController.pgcDel();
|
||||
introController.pgcDel();
|
||||
} else {
|
||||
pgcIntroController.pgcUpdate(
|
||||
introController.pgcUpdate(
|
||||
followStatus,
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
} else {
|
||||
pgcIntroController.pgcAdd();
|
||||
introController.pgcAdd();
|
||||
}
|
||||
},
|
||||
child: Text(
|
||||
isFollowed
|
||||
? '已${pgcIntroController.pgcType}'
|
||||
: pgcIntroController.pgcType,
|
||||
? '已${introController.pgcType}'
|
||||
: introController.pgcType,
|
||||
),
|
||||
);
|
||||
},
|
||||
@@ -309,7 +299,7 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
return GestureDetector(
|
||||
onTap: () => widget.showIntroDetail(
|
||||
item,
|
||||
pgcIntroController.videoTags.value,
|
||||
introController.videoTags.value,
|
||||
),
|
||||
behavior: HitTestBehavior.opaque,
|
||||
child: SizedBox(
|
||||
@@ -413,7 +403,7 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
Widget actionGrid(
|
||||
ThemeData theme,
|
||||
PgcInfoModel item,
|
||||
PgcIntroController pgcIntroController,
|
||||
PgcIntroController introController,
|
||||
) {
|
||||
return SizedBox(
|
||||
height: 48,
|
||||
@@ -423,9 +413,8 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
() => ActionItem(
|
||||
icon: const Icon(FontAwesomeIcons.thumbsUp),
|
||||
selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp),
|
||||
onTap: () => handleState(pgcIntroController.actionLikeVideo),
|
||||
onLongPress: () => handleState(pgcIntroController.actionTriple),
|
||||
selectStatus: pgcIntroController.hasLike.value,
|
||||
onTap: () => handleAction(introController.actionLikeVideo),
|
||||
selectStatus: introController.hasLike.value,
|
||||
semanticsLabel: '点赞',
|
||||
text: NumUtil.numFormat(item.stat!.like),
|
||||
controller: animController,
|
||||
@@ -438,8 +427,8 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
() => ActionItem(
|
||||
icon: const Icon(FontAwesomeIcons.b),
|
||||
selectIcon: const Icon(FontAwesomeIcons.b),
|
||||
onTap: () => handleState(pgcIntroController.actionCoinVideo),
|
||||
selectStatus: pgcIntroController.hasCoin,
|
||||
onTap: introController.actionCoinVideo,
|
||||
selectStatus: introController.hasCoin,
|
||||
semanticsLabel: '投币',
|
||||
text: NumUtil.numFormat(item.stat!.coin),
|
||||
controller: animController,
|
||||
@@ -450,12 +439,12 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
() => ActionItem(
|
||||
icon: const Icon(FontAwesomeIcons.star),
|
||||
selectIcon: const Icon(FontAwesomeIcons.solidStar),
|
||||
onTap: () => pgcIntroController.showFavBottomSheet(context),
|
||||
onLongPress: () => pgcIntroController.showFavBottomSheet(
|
||||
onTap: () => introController.showFavBottomSheet(context),
|
||||
onLongPress: () => introController.showFavBottomSheet(
|
||||
context,
|
||||
isLongPress: true,
|
||||
),
|
||||
selectStatus: pgcIntroController.hasFav.value,
|
||||
selectStatus: introController.hasFav.value,
|
||||
semanticsLabel: '收藏',
|
||||
text: NumUtil.numFormat(item.stat!.favorite),
|
||||
controller: animController,
|
||||
@@ -466,15 +455,15 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
() => ActionItem(
|
||||
icon: const Icon(FontAwesomeIcons.clock),
|
||||
selectIcon: const Icon(FontAwesomeIcons.solidClock),
|
||||
onTap: () => handleState(pgcIntroController.viewLater),
|
||||
selectStatus: pgcIntroController.hasLater.value,
|
||||
onTap: () => handleAction(introController.viewLater),
|
||||
selectStatus: introController.hasLater.value,
|
||||
semanticsLabel: '再看',
|
||||
text: '再看',
|
||||
),
|
||||
),
|
||||
ActionItem(
|
||||
icon: const Icon(FontAwesomeIcons.shareFromSquare),
|
||||
onTap: () => pgcIntroController.actionShareVideo(context),
|
||||
onTap: () => introController.actionShareVideo(context),
|
||||
selectStatus: false,
|
||||
semanticsLabel: '转发',
|
||||
text: NumUtil.numFormat(item.stat!.share),
|
||||
@@ -483,16 +472,4 @@ class _PgcIntroPageState extends State<PgcIntroPage>
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool get hasTriple =>
|
||||
pgcIntroController.hasLike.value &&
|
||||
pgcIntroController.hasCoin &&
|
||||
pgcIntroController.hasFav.value;
|
||||
|
||||
@override
|
||||
void onLike() => handleState(pgcIntroController.actionLikeVideo);
|
||||
|
||||
@override
|
||||
void onTriple() => handleState(pgcIntroController.actionTriple);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user