import 'dart:convert'; T? asT(dynamic value) { if (value is T) { return value; } return null; } class NovelDetailModel { NovelDetailModel({ required this.data, required this.readingRecord, }); factory NovelDetailModel.fromJson(Map json) => NovelDetailModel( data: NovelDetailDataModel.fromJson( asT>(json['data'])!), readingRecord: NovelDetailReadingRecordModel.fromJson( asT>(json['readingRecord'])!), ); NovelDetailDataModel data; NovelDetailReadingRecordModel readingRecord; @override String toString() { return jsonEncode(this); } Map toJson() => { 'data': data, 'readingRecord': readingRecord, }; } class NovelDetailDataModel { NovelDetailDataModel({ required this.novelId, required this.name, required this.zone, required this.status, required this.lastUpdateVolumeName, required this.lastUpdateChapterName, required this.lastUpdateVolumeId, required this.lastUpdateChapterId, required this.lastUpdateTime, required this.cover, required this.hotHits, required this.introduction, required this.types, required this.authors, required this.firstLetter, required this.volume, }); factory NovelDetailDataModel.fromJson(Map json) { final List? types = json['types'] is List ? [] : null; if (types != null) { for (final dynamic item in json['types']!) { if (item != null) { types.add(asT(item)!); } } } final List? volume = json['volume'] is List ? [] : null; if (volume != null) { for (final dynamic item in json['volume']!) { if (item != null) { volume.add(Volume.fromJson(asT>(item)!)); } } } return NovelDetailDataModel( novelId: asT(json['novel_id'])!, name: asT(json['name'])!, zone: asT(json['zone'])!, status: asT(json['status'])!, lastUpdateVolumeName: asT(json['last_update_volume_name'])!, lastUpdateChapterName: asT(json['last_update_chapter_name'])!, lastUpdateVolumeId: asT(json['last_update_volume_id'])!, lastUpdateChapterId: asT(json['last_update_chapter_id'])!, lastUpdateTime: asT(json['last_update_time'])!, cover: asT(json['cover'])!, hotHits: asT(json['hot_hits']) ?? 0, introduction: asT(json['introduction'])!, types: types!, authors: asT(json['authors'])!, firstLetter: asT(json['first_letter'])!, volume: volume!, ); } int novelId; String name; String zone; String status; String lastUpdateVolumeName; String lastUpdateChapterName; int lastUpdateVolumeId; int lastUpdateChapterId; int lastUpdateTime; String cover; int hotHits; String introduction; List types; String authors; String firstLetter; List volume; @override String toString() { return jsonEncode(this); } Map toJson() => { 'novel_id': novelId, 'name': name, 'zone': zone, 'status': status, 'last_update_volume_name': lastUpdateVolumeName, 'last_update_chapter_name': lastUpdateChapterName, 'last_update_volume_id': lastUpdateVolumeId, 'last_update_chapter_id': lastUpdateChapterId, 'last_update_time': lastUpdateTime, 'cover': cover, 'hot_hits': hotHits, 'introduction': introduction, 'types': types, 'authors': authors, 'first_letter': firstLetter, 'volume': volume, }; } class Volume { Volume({ required this.volumeId, required this.lnovelId, required this.volumeName, required this.volumeOrder, required this.addtime, required this.sumChapters, }); factory Volume.fromJson(Map json) => Volume( volumeId: asT(json['volume_id'])!, lnovelId: asT(json['lnovel_id'])!, volumeName: asT(json['volume_name'])!, volumeOrder: asT(json['volume_order'])!, addtime: asT(json['addtime'])!, sumChapters: asT(json['sum_chapters'])!, ); int volumeId; int lnovelId; String volumeName; int volumeOrder; int addtime; int sumChapters; @override String toString() { return jsonEncode(this); } Map toJson() => { 'volume_id': volumeId, 'lnovel_id': lnovelId, 'volume_name': volumeName, 'volume_order': volumeOrder, 'addtime': addtime, 'sum_chapters': sumChapters, }; } class NovelDetailReadingRecordModel { NovelDetailReadingRecordModel({ required this.typeName, required this.uid, required this.source, required this.bizId, required this.chapterId, required this.viewingTime, required this.record, required this.volumeId, required this.totalNum, required this.chapterName, required this.volumeName, }); factory NovelDetailReadingRecordModel.fromJson(Map json) => NovelDetailReadingRecordModel( typeName: asT(json['type_name'])!, uid: asT(json['uid'])!, source: asT(json['source'])!, bizId: asT(json['biz_id'])!, chapterId: asT(json['chapter_id'])!, viewingTime: asT(json['viewing_time'])!, record: asT(json['record'])!, volumeId: asT(json['volume_id'])!, totalNum: asT(json['total_num'])!, chapterName: asT(json['chapter_name'])!, volumeName: asT(json['volume_name'])!, ); String typeName; int uid; int source; int bizId; int chapterId; int viewingTime; int record; int volumeId; int totalNum; String chapterName; String volumeName; @override String toString() { return jsonEncode(this); } Map toJson() => { 'type_name': typeName, 'uid': uid, 'source': source, 'biz_id': bizId, 'chapter_id': chapterId, 'viewing_time': viewingTime, 'record': record, 'volume_id': volumeId, 'total_num': totalNum, 'chapter_name': chapterName, 'volume_name': volumeName, }; }