mod: article: show list

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-27 11:20:34 +08:00
parent 3dad24e7b4
commit dc1cca0d4c
6 changed files with 209 additions and 71 deletions

View File

@@ -1,3 +1,7 @@
import 'package:PiliPlus/models/dynamics/opus_detail/module.dart';
import 'package:PiliPlus/models/dynamics/opus_detail/module_content.dart';
import 'package:PiliPlus/models/dynamics/opus_detail/paragraph.dart';
import 'author.dart';
import 'category.dart';
import 'media.dart';
@@ -44,6 +48,7 @@ class ArticleData {
int? versionId;
String? dynIdStr;
int? totalArtNum;
List<OpusModule>? modules;
ArticleData({
this.id,
@@ -85,61 +90,77 @@ class ArticleData {
this.versionId,
this.dynIdStr,
this.totalArtNum,
this.modules,
});
factory ArticleData.fromJson(Map<String, dynamic> json) => ArticleData(
id: json['id'] as int?,
category: json['category'] == null
? null
: Category.fromJson(json['category'] as Map<String, dynamic>),
categories: (json['categories'] as List<dynamic>?)
?.map((e) => Category.fromJson(e as Map<String, dynamic>))
.toList(),
title: json['title'] as String?,
summary: json['summary'] as String?,
bannerUrl: json['banner_url'] as String?,
templateId: json['template_id'] as int?,
state: json['state'] as int?,
author: json['author'] == null
? null
: Author.fromJson(json['author'] as Map<String, dynamic>),
reprint: json['reprint'] as int?,
imageUrls: json['image_urls'],
publishTime: json['publish_time'] as int?,
ctime: json['ctime'] as int?,
mtime: json['mtime'] as int?,
stats: json['stats'] == null
? null
: Stats.fromJson(json['stats'] as Map<String, dynamic>),
tags: (json['tags'] as List<dynamic>?)
?.map((e) => Tag.fromJson(e as Map<String, dynamic>))
.toList(),
words: json['words'] as int?,
originImageUrls: json['origin_image_urls'],
list: json['list'] as dynamic,
isLike: json['is_like'] as bool?,
media: json['media'] == null
? null
: Media.fromJson(json['media'] as Map<String, dynamic>),
applyTime: json['apply_time'] as String?,
checkTime: json['check_time'] as String?,
original: json['original'] as int?,
actId: json['act_id'] as int?,
dispute: json['dispute'] as dynamic,
authenMark: json['authenMark'] as dynamic,
coverAvid: json['cover_avid'] as int?,
topVideoInfo: json['top_video_info'] as dynamic,
type: json['type'] as int?,
checkState: json['check_state'] as int?,
originTemplateId: json['origin_template_id'] as int?,
privatePub: json['private_pub'] as int?,
contentPicList: json['content_pic_list'] as dynamic,
content: json['content'] as String?,
keywords: json['keywords'] as String?,
versionId: json['version_id'] as int?,
dynIdStr: json['dyn_id_str'] as String?,
totalArtNum: json['total_art_num'] as int?,
);
factory ArticleData.fromJson(Map<String, dynamic> json) {
final data = ArticleData(
id: json['id'] as int?,
category: json['category'] == null
? null
: Category.fromJson(json['category'] as Map<String, dynamic>),
categories: (json['categories'] as List<dynamic>?)
?.map((e) => Category.fromJson(e as Map<String, dynamic>))
.toList(),
title: json['title'] as String?,
summary: json['summary'] as String?,
bannerUrl: json['banner_url'] as String?,
templateId: json['template_id'] as int?,
state: json['state'] as int?,
author: json['author'] == null
? null
: Author.fromJson(json['author'] as Map<String, dynamic>),
reprint: json['reprint'] as int?,
imageUrls: json['image_urls'],
publishTime: json['publish_time'] as int?,
ctime: json['ctime'] as int?,
mtime: json['mtime'] as int?,
stats: json['stats'] == null
? null
: Stats.fromJson(json['stats'] as Map<String, dynamic>),
tags: (json['tags'] as List<dynamic>?)
?.map((e) => Tag.fromJson(e as Map<String, dynamic>))
.toList(),
words: json['words'] as int?,
originImageUrls: json['origin_image_urls'],
list: json['list'] as dynamic,
isLike: json['is_like'] as bool?,
media: json['media'] == null
? null
: Media.fromJson(json['media'] as Map<String, dynamic>),
applyTime: json['apply_time'] as String?,
checkTime: json['check_time'] as String?,
original: json['original'] as int?,
actId: json['act_id'] as int?,
dispute: json['dispute'] as dynamic,
authenMark: json['authenMark'] as dynamic,
coverAvid: json['cover_avid'] as int?,
topVideoInfo: json['top_video_info'] as dynamic,
type: json['type'] as int?,
checkState: json['check_state'] as int?,
originTemplateId: json['origin_template_id'] as int?,
privatePub: json['private_pub'] as int?,
contentPicList: json['content_pic_list'] as dynamic,
content: json['content'] as String?,
keywords: json['keywords'] as String?,
versionId: json['version_id'] as int?,
dynIdStr: json['dyn_id_str'] as String?,
totalArtNum: json['total_art_num'] as int?,
);
if (data.type == 3 && json['opus'] != null) {
data.modules = [
OpusModule(
moduleType: 'MODULE_TYPE_CONTENT',
moduleContent: ModuleContent(
paragraphs: (json['opus']?['content']?['paragraphs'] as List?)
?.map((e) => Paragraph.fromJson(e))
.toList(),
),
)
];
}
return data;
}
Map<String, dynamic> toJson() => {
'id': id,

View File

@@ -1,3 +1,4 @@
import 'node.dart';
import 'pic.dart';
import 'text.dart';
@@ -9,6 +10,7 @@ class Paragraph {
Line? line;
LinkCard? linkCard;
Code? code;
L1st? list;
Paragraph({
this.align,
@@ -18,6 +20,7 @@ class Paragraph {
this.line,
this.linkCard,
this.code,
this.list,
});
factory Paragraph.fromJson(Map<String, dynamic> json) => Paragraph(
@@ -34,6 +37,7 @@ class Paragraph {
? null
: LinkCard.fromJson(json['link_card']),
code: json['code'] == null ? null : Code.fromJson(json['code']),
list: json['list'] == null ? null : L1st.fromJson(json['list']),
);
Map<String, dynamic> toJson() => {
@@ -44,6 +48,28 @@ class Paragraph {
};
}
class L1st {
List<Item>? items;
int? style;
L1st.fromJson(Map<String, dynamic> json) {
items = (json['items'] as List?)?.map((e) => Item.fromJson(e)).toList();
style = json['style'];
}
}
class Item {
int? level;
int? order;
List<Node>? nodes;
Item.fromJson(Map<String, dynamic> json) {
level = json['level'];
order = json['order'];
nodes = (json['nodes'] as List?)?.map((e) => Node.fromJson(e)).toList();
}
}
class Code {
String? content;
String? lang;

View File

@@ -5,8 +5,15 @@ class Word {
double? fontSize;
Style? style;
String? words;
String? fontLevel;
Word({this.color, this.fontSize, this.style, this.words});
Word({
this.color,
this.fontSize,
this.style,
this.words,
this.fontLevel,
});
factory Word.fromJson(Map<String, dynamic> json) => Word(
color: json['color'] == null
@@ -17,6 +24,7 @@ class Word {
? null
: Style.fromJson(json['style'] as Map<String, dynamic>),
words: json['words'] as String?,
fontLevel: json['font_level'] as String?,
);
Map<String, dynamic> toJson() => {
@@ -24,5 +32,6 @@ class Word {
'font_size': fontSize,
'style': style?.toJson(),
'words': words,
'font_level': fontLevel,
};
}