import 'dart:convert'; class DynamicsDataModel { DynamicsDataModel({ this.hasMore, this.items, this.offset, }); bool? hasMore; List? items; String? offset; DynamicsDataModel.fromJson(Map json) { hasMore = json['has_more']; items = json['items'] .map((e) => DynamicItemModel.fromJson(e)) .toList(); offset = json['offset']; } } // 单个动态 class DynamicItemModel { DynamicItemModel({ this.basic, this.idStr, this.modules, this.orig, this.type, this.visible, }); Map? basic; String? idStr; ItemModulesModel? modules; ItemOrigModel? orig; String? type; bool? visible; DynamicItemModel.fromJson(Map json) { basic = json['basic']; idStr = json['id_str']; modules = ItemModulesModel.fromJson(json['modules']); orig = json['orig'] != null ? ItemOrigModel.fromJson(json['orig']) : null; type = json['type']; visible = json['visible']; } } class ItemOrigModel { ItemOrigModel({ this.basic, this.isStr, this.modules, this.type, this.visible, }); Map? basic; String? isStr; ItemModulesModel? modules; String? type; bool? visible; ItemOrigModel.fromJson(Map json) { basic = json['basic']; isStr = json['is_str']; modules = ItemModulesModel.fromJson(json['modules']); type = json['type']; visible = json['visible']; } } // 单个动态详情 class ItemModulesModel { ItemModulesModel({ this.moduleAuthor, this.moduleDynamic, // this.moduleInter, this.moduleStat, }); ModuleAuthorModel? moduleAuthor; ModuleDynamicModel? moduleDynamic; // ModuleInterModel? moduleInter; ModuleStatModel? moduleStat; ItemModulesModel.fromJson(Map json) { moduleAuthor = json['module_author'] != null ? ModuleAuthorModel.fromJson(json['module_author']) : null; moduleDynamic = json['module_dynamic'] != null ? ModuleDynamicModel.fromJson(json['module_dynamic']) : null; // moduleInter = ModuleInterModel.fromJson(json['module_interaction']); moduleStat = json['module_stat'] != null ? ModuleStatModel.fromJson(json['module_stat']) : null; } } // 单个动态详情 - 作者信息 class ModuleAuthorModel { ModuleAuthorModel({ // this.avatar, // this.decorate, this.face, this.following, this.jumpUrl, this.label, this.mid, this.name, // this.officialVerify, // this.pandant, this.pubAction, // this.pubLocationText, this.pubTime, this.pubTs, this.type, // this.vip, }); String? face; bool? following; String? jumpUrl; String? label; int? mid; String? name; String? pubAction; String? pubTime; int? pubTs; String? type; ModuleAuthorModel.fromJson(Map json) { face = json['face']; following = json['following']; jumpUrl = json['jump_url']; label = json['label']; mid = json['mid']; name = json['name']; pubAction = json['pub_action']; pubTime = json['pub_time']; pubTs = json['pub_ts'] == 0 ? null : json['pub_ts']; type = json['type']; } } // 单个动态详情 - 动态信息 class ModuleDynamicModel { ModuleDynamicModel({ this.additional, this.desc, this.major, this.topic, }); DynamicAddModel? additional; DynamicDescModel? desc; DynamicMajorModel? major; DynamicTopicModel? topic; ModuleDynamicModel.fromJson(Map json) { additional = json['additional'] != null ? DynamicAddModel.fromJson(json['additional']) : null; desc = json['desc'] != null ? DynamicDescModel.fromJson(json['desc']) : null; if (json['major'] != null) { major = DynamicMajorModel.fromJson(json['major']); } topic = json['topic'] != null ? DynamicTopicModel.fromJson(json['topic']) : null; } } // 单个动态详情 - 评论?信息 // class ModuleInterModel { // ModuleInterModel({ // }); // ModuleInterModel.fromJson(Map json) { // } // } class DynamicAddModel { DynamicAddModel({ this.type, this.vote, this.ugc, this.reserve, this.goods, }); String? type; Vote? vote; Ugc? ugc; Reserve? reserve; Good? goods; /// TODO 比赛vs String? match; /// TODO 游戏信息 String? common; DynamicAddModel.fromJson(Map json) { type = json['type']; vote = json['vote'] != null ? Vote.fromJson(json['vote']) : null; ugc = json['ugc'] != null ? Ugc.fromJson(json['ugc']) : null; reserve = json['reserve'] != null ? Reserve.fromJson(json['reserve']) : null; goods = json['goods'] != null ? Good.fromJson(json['goods']) : null; } } class Vote { Vote({ this.choiceCnt, this.defaultShare, this.share, this.endTime, this.joinNum, this.status, this.type, this.uid, this.voteId, }); int? choiceCnt; String? share; int? defaultShare; int? endTime; int? joinNum; int? status; int? type; int? uid; int? voteId; Vote.fromJson(Map json) { choiceCnt = json['choice_cnt']; share = json['share']; defaultShare = json['default_share']; endTime = json['end_time']; joinNum = json['join_num']; status = json['status']; type = json['type']; uid = json['uid']; voteId = json['vote_id']; } } class Ugc { Ugc({ this.cover, this.descSecond, this.duration, this.headText, this.idStr, this.jumpUrl, this.multiLine, this.title, }); String? cover; String? descSecond; String? duration; String? headText; String? idStr; String? jumpUrl; bool? multiLine; String? title; Ugc.fromJson(Map 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 Reserve { Reserve({ this.button, this.desc1, this.desc2, this.jumpUrl, this.reserveTotal, this.rid, this.state, this.stype, this.title, this.upMid, }); Map? button; Map? desc1; Map? desc2; String? jumpUrl; int? reserveTotal; int? rid; int? state; int? stype; String? title; int? upMid; Reserve.fromJson(Map json) { button = json['button']; desc1 = json['desc1']; desc2 = json['desc2']; jumpUrl = json['jump_url']; reserveTotal = json['reserve_total']; rid = json['rid']; state = json['state']; state = json['state']; stype = json['stype']; title = json['title']; upMid = json['up_mid']; } } class Good { Good({ this.headIcon, this.headText, this.items, this.jumpUrl, }); String? headIcon; String? headText; List? items; String? jumpUrl; Good.fromJson(Map json) { headIcon = json['head_icon']; headText = json['head_text']; items = json['items'].map((e) => GoodItem.fromJson(e)).toList(); jumpUrl = json['jump_url']; } } class GoodItem { GoodItem({ this.brief, this.cover, this.id, this.jumpDesc, this.jumpUrl, this.name, this.price, }); String? brief; String? cover; String? id; String? jumpDesc; String? jumpUrl; String? name; String? price; GoodItem.fromJson(Map json) { brief = json['brief']; cover = json['cover']; id = json['id']; jumpDesc = json['jump_desc']; jumpUrl = json['jump_url']; name = json['name']; price = json['price']; } } class DynamicDescModel { DynamicDescModel({ this.richTextNodes, this.text, }); List? richTextNodes; String? text; DynamicDescModel.fromJson(Map json) { richTextNodes = json['rich_text_nodes'] != null ? json['rich_text_nodes'] .map((e) => RichTextNodeItem.fromJson(e)) .toList() : []; text = json['text']; } } // class DynamicMajorModel { DynamicMajorModel({ this.archive, this.draw, this.ugcSeason, this.opus, this.pgc, this.liveRcmd, this.live, this.none, this.type, }); DynamicArchiveModel? archive; DynamicDrawModel? draw; DynamicArchiveModel? ugcSeason; DynamicOpusModel? opus; DynamicArchiveModel? pgc; DynamicLiveModel? liveRcmd; DynamicLive2Model? live; DynamicNoneModel? none; // MAJOR_TYPE_DRAW 图片 // MAJOR_TYPE_ARCHIVE 视频 // MAJOR_TYPE_OPUS 图文/文章 String? type; DynamicMajorModel.fromJson(Map json) { archive = json['archive'] != null ? DynamicArchiveModel.fromJson(json['archive']) : null; draw = json['draw'] != null ? DynamicDrawModel.fromJson(json['draw']) : null; ugcSeason = json['ugc_season'] != null ? DynamicArchiveModel.fromJson(json['ugc_season']) : null; opus = json['opus'] != null ? DynamicOpusModel.fromJson(json['opus']) : null; pgc = json['pgc'] != null ? DynamicArchiveModel.fromJson(json['pgc']) : null; liveRcmd = json['live_rcmd'] != null ? DynamicLiveModel.fromJson(json['live_rcmd']) : null; live = json['live'] != null ? DynamicLive2Model.fromJson(json['live']) : null; none = json['none'] != null ? DynamicNoneModel.fromJson(json['none']) : null; type = json['type']; } } class DynamicTopicModel { DynamicTopicModel({ this.id, this.jumpUrl, this.name, }); int? id; String? jumpUrl; String? name; DynamicTopicModel.fromJson(Map json) { id = json['id']; jumpUrl = json['jump_url']; name = json['name']; } } class DynamicArchiveModel { DynamicArchiveModel({ this.aid, this.badge, this.bvid, this.cover, this.desc, this.disablePreview, this.durationText, this.jumpUrl, this.stat, this.title, this.type, }); int? aid; Map? badge; String? bvid; String? cover; String? desc; int? disablePreview; String? durationText; String? jumpUrl; Stat? stat; String? title; int? type; DynamicArchiveModel.fromJson(Map json) { aid = json['aid'] is String ? int.parse(json['aid']) : json['aid']; badge = json['badge']; bvid = json['bvid'] ?? json['epid'].toString() ?? ' '; cover = json['cover']; disablePreview = json['disable_preview']; durationText = json['duration_text']; jumpUrl = json['jump_url']; stat = json['stat'] != null ? Stat.fromJson(json['stat']) : null; title = json['title']; type = json['type']; } } class DynamicDrawModel { DynamicDrawModel({ this.id, this.items, }); int? id; List? items; DynamicDrawModel.fromJson(Map json) { id = json['id']; // ignore: prefer_null_aware_operators items = json['items'] != null ? json['items'] .map((e) => DynamicDrawItemModel.fromJson(e)) .toList() : null; } } class DynamicOpusModel { DynamicOpusModel({ this.jumpUrl, this.pics, this.summary, this.title, }); String? jumpUrl; List? pics; SummaryModel? summary; String? title; DynamicOpusModel.fromJson(Map json) { jumpUrl = json['jump_url']; pics = json['pics'] != null ? json['pics'] .map((e) => OpusPicsModel.fromJson(e)) .toList() : []; summary = json['summary'] != null ? SummaryModel.fromJson(json['summary']) : null; title = json['title']; } } class SummaryModel { SummaryModel({ this.richTextNodes, this.text, }); List? richTextNodes; String? text; SummaryModel.fromJson(Map json) { richTextNodes = json['rich_text_nodes'] .map((e) => RichTextNodeItem.fromJson(e)) .toList(); text = json['text']; } } class RichTextNodeItem { RichTextNodeItem({ this.emoji, this.origText, this.text, this.type, this.rid, }); Emoji? emoji; String? origText; String? text; String? type; String? rid; RichTextNodeItem.fromJson(Map json) { emoji = json['emoji'] != null ? Emoji.fromJson(json['emoji']) : null; origText = json['orig_text']; text = json['text']; type = json['type']; rid = json['rid']; } } class Emoji { Emoji({ this.iconUrl, this.size, this.text, this.type, }); String? iconUrl; double? size; String? text; int? type; Emoji.fromJson(Map json) { iconUrl = json['icon_url']; size = json['size'].toDouble(); text = json['text']; type = json['type']; } } class DynamicNoneModel { DynamicNoneModel({ this.tips, }); String? tips; DynamicNoneModel.fromJson(Map json) { tips = json['tips']; } } class OpusPicsModel { OpusPicsModel({ this.width, this.height, this.size, this.src, this.url, }); int? width; int? height; int? size; String? src; String? url; OpusPicsModel.fromJson(Map json) { width = json['width']; height = json['height']; size = json['size'] != null ? json['size'].toInt() : 0; src = json['src']; url = json['url']; } } class DynamicDrawItemModel { DynamicDrawItemModel({ this.height, this.size, this.src, this.tags, this.width, }); int? height; int? size; String? src; List? tags; int? width; DynamicDrawItemModel.fromJson(Map json) { height = json['height']; size = json['size'].toInt(); src = json['src']; tags = json['tags']; width = json['width']; } } class DynamicLiveModel { DynamicLiveModel({ this.content, }); String? content; int? type; Map? livePlayInfo; int? uid; String? parentAreaName; int? roomId; String? liveId; int? liveStatus; String? cover; int? online; String? areaName; String? title; int? liveStartTime; Map? watchedShow; DynamicLiveModel.fromJson(Map json) { content = json['content']; if (json['content'] != null) { Map data = jsonDecode(json['content']); type = data['type']; Map livePlayInfo = data['live_play_info']; uid = livePlayInfo['uid']; parentAreaName = livePlayInfo['parent_area_name']; roomId = livePlayInfo['room_id']; liveId = livePlayInfo['live_id']; liveStatus = livePlayInfo['live_status']; cover = livePlayInfo['cover']; online = livePlayInfo['online']; areaName = livePlayInfo['area_name']; title = livePlayInfo['title']; liveStartTime = livePlayInfo['live_start_time']; watchedShow = livePlayInfo['watched_show']; } } } class DynamicLive2Model { DynamicLive2Model({ this.badge, this.cover, this.descFirst, this.descSecond, this.id, this.jumpUrl, this.liveState, this.reserveType, this.title, }); Map? badge; String? cover; String? descFirst; String? descSecond; int? id; String? jumpUrl; int? liveState; int? reserveType; String? title; DynamicLive2Model.fromJson(Map json) { badge = json['badge']; cover = json['cover']; descFirst = json['desc_first']; descSecond = json['desc_second']; id = json['id']; jumpUrl = json['jump_url']; liveState = json['liv_state']; reserveType = json['reserve_type']; title = json['title']; } } // 动态状态 转发、评论、点赞 class ModuleStatModel { ModuleStatModel({ this.comment, this.forward, this.like, }); Comment? comment; ForWard? forward; Like? like; ModuleStatModel.fromJson(Map json) { comment = Comment.fromJson(json['comment']); forward = ForWard.fromJson(json['forward']); like = Like.fromJson(json['like']); } } // 动态状态 评论 class Comment { Comment({ this.count, this.forbidden, }); String? count; bool? forbidden; Comment.fromJson(Map json) { count = json['count'] == 0 ? null : json['count'].toString(); forbidden = json['forbidden']; } } class ForWard { ForWard({this.count, this.forbidden}); String? count; bool? forbidden; ForWard.fromJson(Map json) { count = json['count'] == 0 ? null : json['count'].toString(); forbidden = json['forbidden']; } } // 动态状态 点赞 class Like { Like({ this.count, this.forbidden, this.status, }); String? count; bool? forbidden; bool? status; Like.fromJson(Map json) { count = json['count'] == 0 ? null : json['count'].toString(); forbidden = json['forbidden']; status = json['status']; } } class Stat { Stat({ this.danmaku, this.play, }); String? danmaku; String? play; Stat.fromJson(Map json) { danmaku = json['danmaku']; play = json['play']; } }