Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-12-29 21:02:05 +08:00
parent 2a52157c3f
commit b9d594bc8b
26 changed files with 280 additions and 230 deletions

View File

@@ -14,7 +14,7 @@ class ArticleOpus extends StatelessWidget {
@override
Widget build(BuildContext context) {
if ((_ops == null || _ops.isEmpty)) {
if (_ops == null || _ops.isEmpty) {
return const SliverToBoxAdapter();
}
@@ -23,47 +23,47 @@ class ArticleOpus extends StatelessWidget {
itemBuilder: (context, index) {
try {
final item = _ops[index];
if (item.insert is String) {
return SelectableText(item.insert);
switch (item.insert) {
case String e:
return SelectableText(e);
case Insert(:final card):
if (card != null) {
if (card.url?.isNotEmpty == true) {
return GestureDetector(
onTap: () {
switch (item.attributes?.clazz) {
case 'article-card card':
if (card.id != null) {
Get.toNamed(
'/articlePage',
parameters: {
'id': card.id!.substring(2),
'type': 'read',
},
);
}
case 'video-card card':
if (card.id != null) {
PiliScheme.videoPush(null, card.id);
}
case 'vote-card card':
if (card.id != null) {
showVoteDialog(context, int.parse(card.id!));
}
}
},
child: ClipRRect(
borderRadius: StyleString.mdRadius,
child: CachedNetworkImage(
imageUrl: ImageUtils.thumbnailUrl(card.url, 60),
placeholder: (_, _) => const SizedBox.shrink(),
),
),
);
}
}
}
if (item.insert is Insert) {
InsertCard card = item.insert.card;
if (card.url?.isNotEmpty == true) {
return GestureDetector(
onTap: () {
switch (item.attributes?.clazz) {
case 'article-card card':
if (card.id != null) {
Get.toNamed(
'/articlePage',
parameters: {
'id': card.id!.substring(2),
'type': 'read',
},
);
}
case 'video-card card':
if (card.id != null) {
PiliScheme.videoPush(null, card.id);
}
case 'vote-card card':
if (card.id != null) {
showVoteDialog(context, int.parse(card.id!));
}
}
},
child: ClipRRect(
borderRadius: StyleString.mdRadius,
child: CachedNetworkImage(
imageUrl: ImageUtils.thumbnailUrl(card.url, 60),
),
),
);
}
}
return Text('${item.attributes}');
return Text(item.attributes.toString());
} catch (e) {
return Text(e.toString());
}

View File

@@ -1,4 +1,5 @@
import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:PiliPlus/utils/image_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:cached_network_image/cached_network_image.dart';
@@ -43,6 +44,7 @@ Widget htmlRender({
height: height != null ? double.parse(height) : null,
imageUrl: ImageUtils.thumbnailUrl(imgUrl),
fit: BoxFit.contain,
placeholder: (_, _) => const SizedBox.shrink(),
);
}
final size = isEmote ? 22.0 : null;
@@ -56,6 +58,7 @@ Widget htmlRender({
child: CachedNetworkImage(
width: size,
height: size,
memCacheWidth: size?.cacheSize(context),
imageUrl: ImageUtils.thumbnailUrl(imgUrl, 60),
fadeInDuration: const Duration(milliseconds: 120),
fadeOutDuration: const Duration(milliseconds: 120),

View File

@@ -11,6 +11,7 @@ import 'package:PiliPlus/models/dynamics/article_content_model.dart'
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/dynamics/widgets/vote.dart';
import 'package:PiliPlus/utils/app_scheme.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:PiliPlus/utils/extension/string_ext.dart';
import 'package:PiliPlus/utils/extension/theme_ext.dart';
import 'package:PiliPlus/utils/image_utils.dart';
@@ -216,7 +217,7 @@ class OpusContent extends StatelessWidget {
final pic = element.pic!.pics!.first;
final width = pic.width == null
? null
: math.min(maxWidth.toDouble(), pic.width!);
: math.min(maxWidth, pic.width!);
final height = width == null || pic.height == null
? null
: width * pic.height! / pic.width!;
@@ -231,10 +232,11 @@ class OpusContent extends StatelessWidget {
child: CachedNetworkImage(
width: width,
height: height,
memCacheWidth: width?.cacheSize(context),
imageUrl: ImageUtils.thumbnailUrl(pic.url!, 60),
fadeInDuration: const Duration(milliseconds: 120),
fadeOutDuration: const Duration(milliseconds: 120),
placeholder: (context, url) =>
placeholder: (_, _) =>
Image.asset('assets/images/loading.png'),
),
),
@@ -255,11 +257,14 @@ class OpusContent extends StatelessWidget {
);
}
case 3 when (element.line != null):
final height = element.line!.pic!.height?.toDouble();
return CachedNetworkImage(
width: maxWidth,
fit: BoxFit.contain,
height: element.line!.pic!.height?.toDouble(),
height: height,
memCacheHeight: height?.cacheSize(context),
imageUrl: ImageUtils.thumbnailUrl(element.line!.pic!.url!),
placeholder: (_, _) => const SizedBox.shrink(),
);
case 5 when (element.list != null):
return SelectableText.rich(
@@ -688,6 +693,7 @@ class OpusContent extends StatelessWidget {
}
Widget moduleBlockedItem(
BuildContext context,
ThemeData theme,
ModuleBlocked moduleBlocked,
double maxWidth,
@@ -714,14 +720,17 @@ Widget moduleBlockedItem(
Widget icon(double width) {
return CachedNetworkImage(
width: width,
memCacheWidth: width.cacheSize(context),
fit: BoxFit.contain,
imageUrl: ImageUtils.thumbnailUrl(
isDarkMode ? moduleBlocked.icon!.imgDark : moduleBlocked.icon!.imgDay,
),
placeholder: (_, _) => const SizedBox.shrink(),
);
}
Widget btn({
Widget btn(
BuildContext context, {
OutlinedBorder? shape,
VisualDensity? visualDensity,
EdgeInsetsGeometry? padding,
@@ -749,7 +758,9 @@ Widget moduleBlockedItem(
CachedNetworkImage(
height: 16,
color: Colors.white,
imageUrl: moduleBlocked.button!.icon!.http2https,
memCacheHeight: 16.cacheSize(context),
placeholder: (_, _) => const SizedBox.shrink(),
imageUrl: ImageUtils.safeThumbnailUrl(moduleBlocked.button!.icon),
),
Text(moduleBlocked.button!.text ?? ''),
],
@@ -781,6 +792,7 @@ Widget moduleBlockedItem(
if (moduleBlocked.button != null) ...[
const SizedBox(height: 8),
btn(
context,
visualDensity: const VisualDensity(vertical: -2.5),
),
],
@@ -817,6 +829,7 @@ Widget moduleBlockedItem(
),
if (moduleBlocked.button != null)
btn(
context,
visualDensity: const VisualDensity(vertical: -3, horizontal: -4),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(6)),