Files
PiliPlus/lib/pages/dynamics/widgets/dynamic_panel.dart
bggRGjQaUbCoE a2ef4e6f84 chore: clean up
opt: pages

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-04-20 18:07:48 +08:00

145 lines
5.0 KiB
Dart

import 'package:PiliPlus/common/widgets/image_save.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'action_panel.dart';
import 'author_panel.dart';
import 'content_panel.dart';
import 'forward_panel.dart';
class DynamicPanel extends StatelessWidget {
final dynamic item;
final String? source;
final Function? onRemove;
final Function(List<String>, int)? callback;
final bool isSave;
final Function(bool isTop, dynamic dynId)? onSetTop;
const DynamicPanel({
super.key,
required this.item,
this.source,
this.onRemove,
this.callback,
this.isSave = false,
this.onSetTop,
});
@override
Widget build(BuildContext context) {
return Container(
decoration: isSave ||
(source == 'detail' &&
Get.context!.orientation == Orientation.landscape)
? null
: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 8,
color: Theme.of(context).dividerColor.withOpacity(0.05),
),
),
),
child: Material(
elevation: 0,
color: Colors.transparent,
child: InkWell(
onTap: source == 'detail' &&
[
'DYNAMIC_TYPE_AV',
'DYNAMIC_TYPE_UGC_SEASON',
'DYNAMIC_TYPE_PGC_UNION',
'DYNAMIC_TYPE_PGC',
'DYNAMIC_TYPE_LIVE',
'DYNAMIC_TYPE_LIVE_RCMD',
'DYNAMIC_TYPE_MEDIALIST',
].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,
);
}
},
child: (item.modules.moduleAuthor?.pendant?['image'] as String?)
?.isNotEmpty ==
true
? Stack(
clipBehavior: Clip.none,
children: [
_buildContent(context, item, source, callback),
Positioned(
left: 2,
top: 2,
child: IgnorePointer(
child: CachedNetworkImage(
width: 60,
height: 60,
imageUrl: item.modules.moduleAuthor.pendant['image'],
),
),
),
],
)
: _buildContent(context, item, source, callback),
),
),
);
}
Widget _buildContent(context, item, source, callback) => 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,
),
),
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),
if (source == null) ActionPanel(item: item),
if (source == 'detail' && !isSave) const SizedBox(height: 12),
],
);
}