mod: dynamic panel (#738)

This commit is contained in:
My-Responsitories
2025-04-23 16:01:09 +08:00
committed by GitHub
parent 7bb0307e6a
commit e0fe16fd14
6 changed files with 286 additions and 276 deletions

View File

@@ -1,4 +1,5 @@
import 'package:PiliPlus/common/widgets/image_save.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:flutter/material.dart';
@@ -9,7 +10,7 @@ import 'content_panel.dart';
import 'forward_panel.dart';
class DynamicPanel extends StatelessWidget {
final dynamic item;
final DynamicItemModel item;
final String? source;
final Function? onRemove;
final Function(List<String>, int)? callback;
@@ -28,6 +29,13 @@ class DynamicPanel extends StatelessWidget {
@override
Widget build(BuildContext context) {
final authorWidget = AuthorPanel(
item: item,
source: source,
onRemove: onRemove,
isSave: isSave,
onSetTop: onSetTop,
);
return Container(
decoration: isSave ||
(source == 'detail' &&
@@ -46,7 +54,7 @@ class DynamicPanel extends StatelessWidget {
color: Colors.transparent,
child: InkWell(
onTap: source == 'detail' &&
[
const {
'DYNAMIC_TYPE_AV',
'DYNAMIC_TYPE_UGC_SEASON',
'DYNAMIC_TYPE_PGC_UNION',
@@ -54,59 +62,20 @@ class DynamicPanel extends StatelessWidget {
'DYNAMIC_TYPE_LIVE',
'DYNAMIC_TYPE_LIVE_RCMD',
'DYNAMIC_TYPE_MEDIALIST',
].contains(item.type).not
}.contains(item.type).not
? null
: () => PageUtils.pushDynDetail(item, 1),
onLongPress: () {
if (item.type == 'DYNAMIC_TYPE_AV') {
imageSaveDialog(
context: context,
title: item.modules.moduleDynamic.major.archive.title,
cover: item.modules.moduleDynamic.major.archive.cover,
);
} else if (item.type == 'DYNAMIC_TYPE_UGC_SEASON') {
imageSaveDialog(
context: context,
title: item.modules.moduleDynamic.major.ugcSeason.title,
cover: item.modules.moduleDynamic.major.ugcSeason.cover,
);
} else if (item.type == 'DYNAMIC_TYPE_PGC' ||
item.type == 'DYNAMIC_TYPE_PGC_UNION') {
imageSaveDialog(
context: context,
title: item.modules.moduleDynamic.major.pgc.title,
cover: item.modules.moduleDynamic.major.pgc.cover,
);
} else if (item.type == 'DYNAMIC_TYPE_LIVE_RCMD') {
imageSaveDialog(
context: context,
title: item.modules.moduleDynamic.major.liveRcmd.title,
cover: item.modules.moduleDynamic.major.liveRcmd.cover,
);
} else if (item.type == 'DYNAMIC_TYPE_LIVE') {
imageSaveDialog(
context: context,
title: item.modules.moduleDynamic.major.live.title,
cover: item.modules.moduleDynamic.major.live.cover,
);
}
},
onLongPress: () => _imageSaveDialog(context, authorWidget.morePanel),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(12, 12, 12, 6),
child: AuthorPanel(
item: item,
source: source,
onRemove: onRemove,
isSave: isSave,
onSetTop: onSetTop,
),
child: authorWidget,
),
if (item!.modules!.moduleDynamic!.desc != null ||
item!.modules!.moduleDynamic!.major != null)
if (item.modules!.moduleDynamic!.desc != null ||
item.modules!.moduleDynamic!.major != null)
content(isSave, context, item, source, callback),
forWard(isSave, item, context, source, callback),
const SizedBox(height: 2),
@@ -118,4 +87,43 @@ class DynamicPanel extends StatelessWidget {
),
);
}
void _imageSaveDialog(
BuildContext context,
Function(BuildContext) morePanel,
) {
late String? title;
late String? cover;
late final major = item.modules?.moduleDynamic?.major;
switch (item.type) {
case 'DYNAMIC_TYPE_AV':
title = major?.archive?.title;
cover = major?.archive?.cover;
break;
case 'DYNAMIC_TYPE_UGC_SEASON':
title = major?.ugcSeason?.title;
cover = major?.ugcSeason?.cover;
break;
case 'DYNAMIC_TYPE_PGC' || 'DYNAMIC_TYPE_PGC_UNION':
title = major?.pgc?.title;
cover = major?.pgc?.cover;
break;
case 'DYNAMIC_TYPE_LIVE_RCMD':
title = major?.liveRcmd?.title;
cover = major?.liveRcmd?.cover;
break;
case 'DYNAMIC_TYPE_LIVE':
title = major?.live?.title;
cover = major?.live?.cover;
break;
default:
morePanel(context);
return;
}
imageSaveDialog(
context: context,
title: title,
cover: cover,
);
}
}