part of 'comic_source.dart'; class Comment { final String userName; final String? avatar; final String content; final String? time; final int? replyCount; final String? id; final int? score; final bool? isLiked; final int? voteStatus; // 1: upvote, -1: downvote, 0: none Comment.fromJson(Map json) : userName = json["userName"], avatar = json["avatar"], content = json["content"], time = json["time"], replyCount = json["replyCount"], id = json["id"].toString(), score = json["score"], isLiked = json["isLiked"], voteStatus = json["voteStatus"]; } class Comic { final String title; final String cover; final String id; final String? subtitle; final List? tags; final String description; final String sourceKey; final int? maxPage; const Comic(this.title, this.cover, this.id, this.subtitle, this.tags, this.description, this.sourceKey, this.maxPage); Map toJson() { return { "title": title, "cover": cover, "id": id, "subTitle": subtitle, "tags": tags, "description": description, "sourceKey": sourceKey, "maxPage": maxPage, }; } Comic.fromJson(Map json, this.sourceKey) : title = json["title"], subtitle = json["subTitle"] ?? "", cover = json["cover"], id = json["id"], tags = List.from(json["tags"] ?? []), description = json["description"] ?? "", maxPage = json["maxPage"]; } class ComicDetails with HistoryMixin { @override final String title; @override final String? subTitle; @override final String cover; final String? description; final Map> tags; /// id-name final Map? chapters; final List? thumbnails; final List? recommend; final String sourceKey; final String comicId; final bool? isFavorite; final String? subId; final bool? isLiked; final int? likesCount; final int? commentsCount; final String? uploader; final String? uploadTime; final String? updateTime; static Map> _generateMap(Map map) { var res = >{}; map.forEach((key, value) { res[key] = List.from(value); }); return res; } ComicDetails.fromJson(Map json) : title = json["title"], subTitle = json["subTitle"], cover = json["cover"], description = json["description"], tags = _generateMap(json["tags"]), chapters = json["chapters"] == null ? null : Map.from(json["chapters"]), sourceKey = json["sourceKey"], comicId = json["comicId"], thumbnails = ListOrNull.from(json["thumbnails"]), recommend = (json["recommend"] as List?) ?.map((e) => Comic.fromJson(e, json["sourceKey"])) .toList(), isFavorite = json["isFavorite"], subId = json["subId"], likesCount = json["likesCount"], isLiked = json["isLiked"], commentsCount = json["commentsCount"], uploader = json["uploader"], uploadTime = json["uploadTime"], updateTime = json["updateTime"]; Map toJson() { return { "title": title, "subTitle": subTitle, "cover": cover, "description": description, "tags": tags, "chapters": chapters, "thumbnails": thumbnails, "recommend": null, "sourceKey": sourceKey, "comicId": comicId, "isFavorite": isFavorite, "subId": subId, "isLiked": isLiked, "likesCount": likesCount, "commentsCount": commentsCount, "uploader": uploader, "uploadTime": uploadTime, "updateTime": updateTime, }; } @override HistoryType get historyType => HistoryType(sourceKey.hashCode); @override String get id => comicId; ComicType get comicType => ComicType(sourceKey.hashCode); }