Files
PiliPlus/lib/pages/dynamics/widgets/forward_panel.dart
My-Responsitories 37fb63c3b1 tweaks (#1252)
* opt: cache

* opt: MediaListPanel

* feat: nested replyreply panel

* tweaks

* opt: abstract class

* opt: PageStorageKey

* opt: contextExt

* opt: EpisodePanel

* opt

* opt: context instead GlobalKey

* feat: jump to reply

* refa: reply_reply

* fix: jump

* fix: index

* update

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* opt: keepalive

* reapply: nested replyreply

* mod: spacing

* opt: CommonSlidePageState

* fix drag bottomsheet

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* opt reply jump

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* opt reply2reply

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* tweaks

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* tweaks

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* reapply: jumpToReply

* fix: padding

* fix: anim

* fix some panels

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

* opt: implements Scaffold

* opt: remove keepalive

* revert: GlobalKey

* tweaks

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>

---------

Co-authored-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-09-15 18:45:28 +08:00

137 lines
3.7 KiB
Dart

import 'package:PiliPlus/common/widgets/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/dynamics/widgets/dyn_content.dart';
import 'package:PiliPlus/pages/dynamics/widgets/module_panel.dart';
import 'package:PiliPlus/utils/date_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:flutter/material.dart' hide InkWell;
import 'package:get/get.dart';
Widget forwardPanel(
BuildContext context, {
required int floor,
required ThemeData theme,
required DynamicItemModel orig,
required bool isSave,
required bool isDetail,
required double maxWidth,
}) {
final moduleDynamic = orig.modules.moduleDynamic;
final major = moduleDynamic?.major;
final isNoneMajor = major?.type == 'MAJOR_TYPE_NONE';
Widget child;
if (isNoneMajor) {
child = noneWidget(theme, major?.none?.tips);
} else {
child = Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_forwardAuthor(
theme: theme,
moduleAuthor: orig.modules.moduleAuthor!,
isSave: isSave,
),
const SizedBox(height: 5),
...dynContent(
context,
theme: theme,
isSave: isSave,
isDetail: isDetail,
item: orig,
floor: floor + 1,
maxWidth: maxWidth - 30,
),
],
);
}
child = Container(
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 8),
color: theme.dividerColor.withValues(alpha: 0.08),
child: child,
);
if (isNoneMajor) {
return child;
}
return InkWell(
onTap: () => PageUtils.pushDynDetail(orig),
onLongPress: () {
String? title, cover, bvid;
switch (orig.type) {
case 'DYNAMIC_TYPE_AV':
title = major?.archive?.title;
cover = major?.archive?.cover;
bvid = major?.archive?.bvid;
break;
case 'DYNAMIC_TYPE_UGC_SEASON':
title = major?.ugcSeason?.title;
cover = major?.ugcSeason?.cover;
bvid = major?.ugcSeason?.bvid;
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:
return;
}
if (cover != null) {
imageSaveDialog(
title: title,
cover: cover,
bvid: bvid,
);
}
},
child: child,
);
}
Widget _forwardAuthor({
required ThemeData theme,
required ModuleAuthorModel moduleAuthor,
required bool isSave,
}) {
final isNormalAuth = moduleAuthor.type == 'AUTHOR_TYPE_NORMAL';
return Row(
children: [
GestureDetector(
onTap: isNormalAuth
? () => Get.toNamed('/member?mid=${moduleAuthor.mid}')
: null,
child: Text(
'${isNormalAuth ? '@' : ''}${moduleAuthor.name}',
style: TextStyle(color: theme.colorScheme.primary),
),
),
const SizedBox(width: 6),
Text(
isSave
? DateFormatUtils.format(
moduleAuthor.pubTs,
format: DateFormatUtils.longFormatDs,
)
: DateFormatUtils.dateFormat(moduleAuthor.pubTs),
style: TextStyle(
color: theme.colorScheme.outline,
fontSize: theme.textTheme.labelSmall!.fontSize,
),
),
],
);
}