opt dyn panel

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-09-03 13:29:16 +08:00
parent a635767561
commit 04830c7789
22 changed files with 1353 additions and 1426 deletions

View File

@@ -1,73 +1,65 @@
import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:flutter/material.dart';
Widget livePanel(
ThemeData theme,
bool isDetail,
DynamicItemModel item,
BuildContext context, {
int floor = 1,
required int floor,
required ThemeData theme,
required DynamicItemModel item,
required bool isDetail,
required double maxWidth,
Function(List<String>, int)? callback,
}) {
DynamicMajorModel? content = item.modules.moduleDynamic!.major;
if (content == null) {
DynamicLive2Model? live = item.modules.moduleDynamic!.major!.live;
if (live == null) {
return const SizedBox.shrink();
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => PageUtils.toLiveRoom(content.live?.id),
onLongPress: () {
Feedback.forLongPress(context);
imageSaveDialog(
title: content.live!.title,
cover: content.live!.cover,
);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
NetworkImgLayer(
width: 120,
height: 75,
src: content.live!.cover,
),
const SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
content.live!.title!,
maxLines: isDetail ? null : 2,
overflow: isDetail ? null : TextOverflow.ellipsis,
),
const SizedBox(height: 4),
if (content.live?.descFirst != null)
Text(
content.live!.descFirst!,
style: TextStyle(
color: theme.colorScheme.outline,
fontSize: theme.textTheme.labelMedium!.fontSize,
),
),
],
),
),
if (content.live!.badge?.text != null)
Text(
content.live!.badge!.text!,
style: TextStyle(
fontSize: theme.textTheme.labelMedium!.fontSize,
),
),
],
return Padding(
padding: floor == 1
? const EdgeInsets.symmetric(horizontal: 12)
: EdgeInsets.zero,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
NetworkImgLayer(
width: 120,
height: 75,
src: live.cover,
),
),
],
const SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
live.title!,
maxLines: isDetail ? null : 2,
overflow: isDetail ? null : TextOverflow.ellipsis,
),
const SizedBox(height: 4),
if (live.descFirst case final descFirst?)
Text(
descFirst,
style: TextStyle(
color: theme.colorScheme.outline,
fontSize: theme.textTheme.labelMedium!.fontSize,
),
),
],
),
),
if (live.badge?.text case final badge?)
Text(
badge,
style: TextStyle(
fontSize: theme.textTheme.labelMedium!.fontSize,
color: live.liveState == 1
? theme.colorScheme.primary
: theme.colorScheme.outline,
),
),
],
),
);
}