mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: article: show linkcard
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -7,8 +7,16 @@ class Paragraph {
|
|||||||
ParagraphText? text;
|
ParagraphText? text;
|
||||||
Pic? pic;
|
Pic? pic;
|
||||||
Line? line;
|
Line? line;
|
||||||
|
LinkCard? linkCard;
|
||||||
|
|
||||||
Paragraph({this.align, this.paraType, this.text, this.pic, this.line});
|
Paragraph({
|
||||||
|
this.align,
|
||||||
|
this.paraType,
|
||||||
|
this.text,
|
||||||
|
this.pic,
|
||||||
|
this.line,
|
||||||
|
this.linkCard,
|
||||||
|
});
|
||||||
|
|
||||||
factory Paragraph.fromJson(Map<String, dynamic> json) => Paragraph(
|
factory Paragraph.fromJson(Map<String, dynamic> json) => Paragraph(
|
||||||
align: json['align'] as int?,
|
align: json['align'] as int?,
|
||||||
@@ -20,6 +28,9 @@ class Paragraph {
|
|||||||
? null
|
? null
|
||||||
: Pic.fromJson(json['pic'] as Map<String, dynamic>),
|
: Pic.fromJson(json['pic'] as Map<String, dynamic>),
|
||||||
line: json['line'] == null ? null : Line.fromJson(json['line']),
|
line: json['line'] == null ? null : Line.fromJson(json['line']),
|
||||||
|
linkCard: json['link_card'] == null
|
||||||
|
? null
|
||||||
|
: LinkCard.fromJson(json['link_card']),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => {
|
Map<String, dynamic> toJson() => {
|
||||||
@@ -30,6 +41,56 @@ class Paragraph {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Ugc {
|
||||||
|
String? cover;
|
||||||
|
String? descSecond;
|
||||||
|
String? duration;
|
||||||
|
String? headText;
|
||||||
|
String? idStr;
|
||||||
|
String? jumpUrl;
|
||||||
|
bool? multiLine;
|
||||||
|
String? title;
|
||||||
|
|
||||||
|
Ugc.fromJson(Map<String, dynamic> json) {
|
||||||
|
cover = json['cover'];
|
||||||
|
descSecond = json['desc_second'];
|
||||||
|
duration = json['duration'];
|
||||||
|
headText = json['head_text'];
|
||||||
|
idStr = json['id_str'];
|
||||||
|
jumpUrl = json['jump_url'];
|
||||||
|
multiLine = json['multi_line'];
|
||||||
|
title = json['title'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Card {
|
||||||
|
Card({
|
||||||
|
this.oid,
|
||||||
|
this.type,
|
||||||
|
this.ugc,
|
||||||
|
});
|
||||||
|
String? oid;
|
||||||
|
String? type;
|
||||||
|
Ugc? ugc;
|
||||||
|
|
||||||
|
Card.fromJson(Map<String, dynamic> json) {
|
||||||
|
oid = json['oid'];
|
||||||
|
type = json['type'];
|
||||||
|
ugc = json['ugc'] == null ? null : Ugc.fromJson(json['ugc']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LinkCard {
|
||||||
|
LinkCard({
|
||||||
|
this.card,
|
||||||
|
});
|
||||||
|
Card? card;
|
||||||
|
|
||||||
|
LinkCard.fromJson(Map<String, dynamic> json) {
|
||||||
|
card = json['card'] == null ? null : Card.fromJson(json['card']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Line {
|
class Line {
|
||||||
Line({
|
Line({
|
||||||
this.pic,
|
this.pic,
|
||||||
|
|||||||
@@ -174,11 +174,69 @@ Widget opusContent({
|
|||||||
|
|
||||||
if (element.paraType == 3) {
|
if (element.paraType == 3) {
|
||||||
return CachedNetworkImage(
|
return CachedNetworkImage(
|
||||||
imageUrl: Utils.thumbnailImgUrl(element.line!.pic!.url!),
|
width: maxWidth,
|
||||||
|
fit: BoxFit.contain,
|
||||||
height: element.line?.pic?.height,
|
height: element.line?.pic?.height,
|
||||||
|
imageUrl: Utils.thumbnailImgUrl(element.line!.pic!.url!),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (element.paraType == 6) {
|
||||||
|
if (element.linkCard?.card?.ugc != null) {
|
||||||
|
return Card(
|
||||||
|
margin: EdgeInsets.zero,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius:
|
||||||
|
const BorderRadius.all(Radius.circular(8)),
|
||||||
|
),
|
||||||
|
color: Theme.of(context).colorScheme.onInverseSurface,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
try {
|
||||||
|
PiliScheme.videoPush(
|
||||||
|
int.parse(element.linkCard!.card!.oid!),
|
||||||
|
null,
|
||||||
|
);
|
||||||
|
} catch (_) {}
|
||||||
|
},
|
||||||
|
borderRadius:
|
||||||
|
const BorderRadius.all(Radius.circular(8)),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
NetworkImgLayer(
|
||||||
|
radius: 6,
|
||||||
|
width: 65 * 16 / 10,
|
||||||
|
height: 65,
|
||||||
|
src: element.linkCard!.card!.ugc!.cover,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(element.linkCard!.card!.ugc!.title!),
|
||||||
|
Text(
|
||||||
|
element.linkCard!.card!.ugc!.descSecond!,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
color: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.outline,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
},
|
},
|
||||||
separatorBuilder: (BuildContext context, int index) =>
|
separatorBuilder: (BuildContext context, int index) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user