feat: 整体常用控件封装,常用工具类。首页数据对接
This commit is contained in:
1 parent
d90d023e85
commit
fbcd33ea2b
50 files changed
+4558
-264
No files matched your search
@@ -0,0 +1,23 @@
|
||||
import '../model_parser.dart';
|
||||
|
||||
class SkywoodCategory {
|
||||
final int id;
|
||||
final String name;
|
||||
|
||||
const SkywoodCategory({required this.id, required this.name});
|
||||
|
||||
factory SkywoodCategory.fromJson(Map<String, dynamic> json) {
|
||||
return SkywoodCategory(
|
||||
id: parseInt(json['id']),
|
||||
name: parseString(json['name']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {'id': id, 'name': name};
|
||||
}
|
||||
|
||||
SkywoodCategory copyWith({int? id, String? name}) {
|
||||
return SkywoodCategory(id: id ?? this.id, name: name ?? this.name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
import '../model_parser.dart';
|
||||
import 'skywood_drama.dart';
|
||||
import 'skywood_episode.dart';
|
||||
|
||||
class SkywoodDetail {
|
||||
final SkywoodDrama? videoInfo;
|
||||
final SkywoodDrama? shortPlayInfo;
|
||||
final List<SkywoodEpisode> episodeList;
|
||||
final String? businessModel;
|
||||
bool? isCollect;
|
||||
final bool? showShareCoin;
|
||||
final int? shareCoin;
|
||||
final int? revolution;
|
||||
final String? userLevel;
|
||||
final int? jumpType;
|
||||
final int? jumpShortPlayId;
|
||||
final List<int>? checkPoint;
|
||||
|
||||
SkywoodDetail({
|
||||
required this.videoInfo,
|
||||
this.shortPlayInfo,
|
||||
required this.episodeList,
|
||||
this.businessModel,
|
||||
this.isCollect,
|
||||
this.showShareCoin,
|
||||
this.shareCoin,
|
||||
this.revolution,
|
||||
this.userLevel,
|
||||
this.jumpType,
|
||||
this.jumpShortPlayId,
|
||||
this.checkPoint,
|
||||
});
|
||||
|
||||
factory SkywoodDetail.fromJson(Map<String, dynamic> json) {
|
||||
return SkywoodDetail(
|
||||
videoInfo: parseMap(json['video_info']) == null
|
||||
? null
|
||||
: SkywoodDrama.fromJson(parseMap(json['video_info'])!),
|
||||
shortPlayInfo: parseMap(json['shortPlayInfo']) == null
|
||||
? null
|
||||
: SkywoodDrama.fromJson(parseMap(json['shortPlayInfo'])!),
|
||||
episodeList: parseModelList(json['episodeList'], SkywoodEpisode.fromJson),
|
||||
businessModel: json['business_model'] as String?,
|
||||
isCollect: json['is_collect'] == null
|
||||
? null
|
||||
: parseBool(json['is_collect']),
|
||||
showShareCoin: json['show_share_coin'] == null
|
||||
? null
|
||||
: parseBool(json['show_share_coin']),
|
||||
shareCoin: json['share_coin'] == null
|
||||
? null
|
||||
: parseInt(json['share_coin']),
|
||||
revolution: json['revolution'] == null
|
||||
? null
|
||||
: parseInt(json['revolution']),
|
||||
userLevel: json['user_level'] as String?,
|
||||
jumpType: json['jump_type'] == null ? null : parseInt(json['jump_type']),
|
||||
jumpShortPlayId: json['jump_short_play_id'] == null
|
||||
? null
|
||||
: parseInt(json['jump_short_play_id']),
|
||||
checkPoint: parseIntList(json['check_point']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'video_info': videoInfo?.toJson(),
|
||||
'shortPlayInfo': shortPlayInfo?.toJson(),
|
||||
'episodeList': episodeList.map((item) => item.toJson()).toList(),
|
||||
'business_model': businessModel,
|
||||
'is_collect': isCollect,
|
||||
'show_share_coin': showShareCoin,
|
||||
'share_coin': shareCoin,
|
||||
'revolution': revolution,
|
||||
'user_level': userLevel,
|
||||
'jump_type': jumpType,
|
||||
'jump_short_play_id': jumpShortPlayId,
|
||||
'check_point': checkPoint,
|
||||
};
|
||||
}
|
||||
|
||||
SkywoodDetail copyWith({
|
||||
SkywoodDrama? videoInfo,
|
||||
SkywoodDrama? shortPlayInfo,
|
||||
List<SkywoodEpisode>? episodeList,
|
||||
String? businessModel,
|
||||
bool? isCollect,
|
||||
bool? showShareCoin,
|
||||
int? shareCoin,
|
||||
int? revolution,
|
||||
String? userLevel,
|
||||
int? jumpType,
|
||||
int? jumpShortPlayId,
|
||||
List<int>? checkPoint,
|
||||
}) {
|
||||
return SkywoodDetail(
|
||||
videoInfo: videoInfo ?? this.videoInfo,
|
||||
shortPlayInfo: shortPlayInfo ?? this.shortPlayInfo,
|
||||
episodeList: episodeList ?? this.episodeList,
|
||||
businessModel: businessModel ?? this.businessModel,
|
||||
isCollect: isCollect ?? this.isCollect,
|
||||
showShareCoin: showShareCoin ?? this.showShareCoin,
|
||||
shareCoin: shareCoin ?? this.shareCoin,
|
||||
revolution: revolution ?? this.revolution,
|
||||
userLevel: userLevel ?? this.userLevel,
|
||||
jumpType: jumpType ?? this.jumpType,
|
||||
jumpShortPlayId: jumpShortPlayId ?? this.jumpShortPlayId,
|
||||
checkPoint: checkPoint ?? this.checkPoint,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
import '../model_parser.dart';
|
||||
import 'skywood_category.dart';
|
||||
|
||||
class SkywoodDrama {
|
||||
final int? id;
|
||||
final int shortId;
|
||||
int? shortPlayId;
|
||||
final String name;
|
||||
final String description;
|
||||
final String imageUrl;
|
||||
final String horizontallyImg;
|
||||
int collectTotal;
|
||||
final int watchTotal;
|
||||
final int episodeTotal;
|
||||
final String? playSeconds;
|
||||
bool? isCollect;
|
||||
final String? videoUrl;
|
||||
final Map<String, dynamic>? videoInfo;
|
||||
final List<String>? category;
|
||||
final List<SkywoodCategory>? categoryList;
|
||||
final String tagType;
|
||||
int? episode;
|
||||
final int? process;
|
||||
final int? buyType;
|
||||
final int? searchClickTotal;
|
||||
final int? shortPlayVideoId;
|
||||
final int? currentEpisode;
|
||||
int? historyTime;
|
||||
|
||||
|
||||
SkywoodDrama({
|
||||
this.id,
|
||||
required this.shortId,
|
||||
this.shortPlayId,
|
||||
required this.name,
|
||||
required this.description,
|
||||
required this.imageUrl,
|
||||
required this.horizontallyImg,
|
||||
required this.collectTotal,
|
||||
required this.watchTotal,
|
||||
required this.episodeTotal,
|
||||
this.playSeconds,
|
||||
this.isCollect,
|
||||
this.videoUrl,
|
||||
this.videoInfo,
|
||||
this.category,
|
||||
this.categoryList,
|
||||
required this.tagType,
|
||||
this.episode,
|
||||
this.process,
|
||||
this.buyType,
|
||||
this.searchClickTotal,
|
||||
this.shortPlayVideoId,
|
||||
this.currentEpisode,
|
||||
this.historyTime,
|
||||
});
|
||||
|
||||
factory SkywoodDrama.fromJson(Map<String, dynamic> json) {
|
||||
return SkywoodDrama(
|
||||
id: json['id'] == null ? null : parseInt(json['id']),
|
||||
shortId: parseInt(json['short_id']),
|
||||
shortPlayId: json['short_play_id'] == null
|
||||
? null
|
||||
: parseInt(json['short_play_id']),
|
||||
name: parseString(json['name']),
|
||||
description: parseString(json['description']),
|
||||
imageUrl: parseString(json['image_url']),
|
||||
horizontallyImg: parseString(json['horizontally_img']),
|
||||
collectTotal: parseInt(json['collect_total']),
|
||||
watchTotal: parseInt(json['watch_total']),
|
||||
episodeTotal: parseInt(json['episode_total']),
|
||||
playSeconds: json['play_seconds'] as String?,
|
||||
isCollect: json['is_collect'] == null
|
||||
? null
|
||||
: parseBool(json['is_collect']),
|
||||
videoUrl: json['video_url'] as String?,
|
||||
videoInfo: parseMap(json['video_info']),
|
||||
category: parseStringList(json['category']),
|
||||
categoryList: json['categoryList'] == null
|
||||
? null
|
||||
: parseModelList(json['categoryList'], SkywoodCategory.fromJson),
|
||||
tagType: parseString(json['tag_type']),
|
||||
episode: json['episode'] == null ? null : parseInt(json['episode']),
|
||||
process: json['process'] == null ? null : parseInt(json['process']),
|
||||
buyType: json['buy_type'] == null ? null : parseInt(json['buy_type']),
|
||||
searchClickTotal: json['search_click_total'] == null
|
||||
? null
|
||||
: parseInt(json['search_click_total']),
|
||||
shortPlayVideoId: json['short_play_video_id'] == null
|
||||
? null
|
||||
: parseInt(json['short_play_video_id']),
|
||||
currentEpisode: json['current_episode'] == null
|
||||
? null
|
||||
: parseInt(json['current_episode']),
|
||||
historyTime: json['history_time'] == null
|
||||
? null
|
||||
: parseInt(json['history_time']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'short_id': shortId,
|
||||
'short_play_id': shortPlayId,
|
||||
'name': name,
|
||||
'description': description,
|
||||
'image_url': imageUrl,
|
||||
'horizontally_img': horizontallyImg,
|
||||
'collect_total': collectTotal,
|
||||
'watch_total': watchTotal,
|
||||
'episode_total': episodeTotal,
|
||||
'play_seconds': playSeconds,
|
||||
'is_collect': isCollect,
|
||||
'video_url': videoUrl,
|
||||
'video_info': videoInfo,
|
||||
'category': category,
|
||||
'categoryList': categoryList?.map((item) => item.toJson()).toList(),
|
||||
'tag_type': tagType,
|
||||
'episode': episode,
|
||||
'process': process,
|
||||
'buy_type': buyType,
|
||||
'search_click_total': searchClickTotal,
|
||||
'short_play_video_id': shortPlayVideoId,
|
||||
'current_episode': currentEpisode,
|
||||
'history_time': historyTime,
|
||||
};
|
||||
}
|
||||
|
||||
SkywoodDrama copyWith({
|
||||
int? id,
|
||||
int? shortId,
|
||||
int? shortPlayId,
|
||||
String? name,
|
||||
String? description,
|
||||
String? imageUrl,
|
||||
String? horizontallyImg,
|
||||
int? collectTotal,
|
||||
int? watchTotal,
|
||||
int? episodeTotal,
|
||||
String? playSeconds,
|
||||
bool? isCollect,
|
||||
String? videoUrl,
|
||||
Map<String, dynamic>? videoInfo,
|
||||
List<String>? category,
|
||||
List<SkywoodCategory>? categoryList,
|
||||
String? tagType,
|
||||
int? episode,
|
||||
int? process,
|
||||
int? buyType,
|
||||
int? searchClickTotal,
|
||||
int? shortPlayVideoId,
|
||||
int? currentEpisode,
|
||||
int? historyTime,
|
||||
}) {
|
||||
return SkywoodDrama(
|
||||
id: id ?? this.id,
|
||||
shortId: shortId ?? this.shortId,
|
||||
shortPlayId: shortPlayId ?? this.shortPlayId,
|
||||
name: name ?? this.name,
|
||||
description: description ?? this.description,
|
||||
imageUrl: imageUrl ?? this.imageUrl,
|
||||
horizontallyImg: horizontallyImg ?? this.horizontallyImg,
|
||||
collectTotal: collectTotal ?? this.collectTotal,
|
||||
watchTotal: watchTotal ?? this.watchTotal,
|
||||
episodeTotal: episodeTotal ?? this.episodeTotal,
|
||||
playSeconds: playSeconds ?? this.playSeconds,
|
||||
isCollect: isCollect ?? this.isCollect,
|
||||
videoUrl: videoUrl ?? this.videoUrl,
|
||||
videoInfo: videoInfo ?? this.videoInfo,
|
||||
category: category ?? this.category,
|
||||
categoryList: categoryList ?? this.categoryList,
|
||||
tagType: tagType ?? this.tagType,
|
||||
episode: episode ?? this.episode,
|
||||
process: process ?? this.process,
|
||||
buyType: buyType ?? this.buyType,
|
||||
searchClickTotal: searchClickTotal ?? this.searchClickTotal,
|
||||
shortPlayVideoId: shortPlayVideoId ?? this.shortPlayVideoId,
|
||||
currentEpisode: currentEpisode ?? this.currentEpisode,
|
||||
historyTime: historyTime ?? this.historyTime,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
import '../model_parser.dart';
|
||||
|
||||
class SkywoodEpisode {
|
||||
final int id;
|
||||
final int shortId;
|
||||
final int shortPlayId;
|
||||
final int shortPlayVideoId;
|
||||
final int episode;
|
||||
final String videoUrl;
|
||||
final int? promiseViewAd;
|
||||
final int iaaPopUp;
|
||||
bool isLock;
|
||||
String playSeconds;
|
||||
int? viewAdCount;
|
||||
|
||||
SkywoodEpisode({
|
||||
required this.id,
|
||||
required this.shortId,
|
||||
required this.shortPlayId,
|
||||
required this.shortPlayVideoId,
|
||||
required this.episode,
|
||||
required this.videoUrl,
|
||||
required this.playSeconds,
|
||||
required this.isLock,
|
||||
this.promiseViewAd,
|
||||
required this.iaaPopUp,
|
||||
required this.viewAdCount,
|
||||
});
|
||||
|
||||
factory SkywoodEpisode.fromJson(Map<String, dynamic> json) {
|
||||
return SkywoodEpisode(
|
||||
id: parseInt(json['id']),
|
||||
shortId: parseInt(json['short_id']),
|
||||
shortPlayId: parseInt(json['short_play_id']),
|
||||
shortPlayVideoId: parseInt(json['short_play_video_id']),
|
||||
episode: parseInt(json['episode']),
|
||||
videoUrl: parseString(json['video_url']),
|
||||
playSeconds: parseString(json['play_seconds']),
|
||||
isLock: parseBool(json['is_lock']),
|
||||
promiseViewAd: json['promise_view_ad'] == null
|
||||
? null
|
||||
: parseInt(json['promise_view_ad']),
|
||||
iaaPopUp: parseInt(json['iaa_pop_up']),
|
||||
viewAdCount: parseInt(json['view_ad_count']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'short_id': shortId,
|
||||
'short_play_id': shortPlayId,
|
||||
'short_play_video_id': shortPlayVideoId,
|
||||
'episode': episode,
|
||||
'video_url': videoUrl,
|
||||
'promise_view_ad': promiseViewAd,
|
||||
'iaa_pop_up': iaaPopUp,
|
||||
'is_lock': isLock,
|
||||
'play_seconds': playSeconds,
|
||||
'view_ad_count': viewAdCount,
|
||||
};
|
||||
}
|
||||
|
||||
SkywoodEpisode copyWith({
|
||||
int? id,
|
||||
int? shortId,
|
||||
int? shortPlayId,
|
||||
int? shortPlayVideoId,
|
||||
int? episode,
|
||||
String? videoUrl,
|
||||
bool? isLock,
|
||||
String? playSeconds,
|
||||
String? durationSeconds,
|
||||
int? promiseViewAd,
|
||||
int? viewAdCount,
|
||||
int? iaaPopUp,
|
||||
}) {
|
||||
return SkywoodEpisode(
|
||||
id: id ?? this.id,
|
||||
shortId: shortId ?? this.shortId,
|
||||
shortPlayId: shortPlayId ?? this.shortPlayId,
|
||||
shortPlayVideoId: shortPlayVideoId ?? this.shortPlayVideoId,
|
||||
episode: episode ?? this.episode,
|
||||
videoUrl: videoUrl ?? this.videoUrl,
|
||||
isLock: isLock ?? this.isLock,
|
||||
playSeconds: playSeconds ?? this.playSeconds,
|
||||
promiseViewAd: promiseViewAd ?? this.promiseViewAd,
|
||||
viewAdCount: viewAdCount ?? this.viewAdCount,
|
||||
iaaPopUp: iaaPopUp ?? this.iaaPopUp,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'package:skywood/utils/models/drama/skywood_drama.dart';
|
||||
|
||||
class SkywoodHome {
|
||||
final String? moduleKey;
|
||||
final List<SkywoodDrama> dataList;
|
||||
|
||||
const SkywoodHome({required this.moduleKey, required this.dataList});
|
||||
|
||||
factory SkywoodHome.fromJson(Map<String, dynamic> json) {
|
||||
// Map<String, dynamic>? map = json['data'];
|
||||
// List? list = map!['list'];
|
||||
// List<SkywoodDrama> datas = [];
|
||||
// if (list != null) {
|
||||
// datas = list.map((e) => SkywoodDrama.fromJson(e)).toList();
|
||||
// }
|
||||
final data = json['data'];
|
||||
List<SkywoodDrama> videos = [];
|
||||
|
||||
// 🔥 判断 data 的类型
|
||||
if (data is Map<String, dynamic>) {
|
||||
// 情况1: data 是 Map,从中取 list
|
||||
final list = data['list'];
|
||||
if (list is List) {
|
||||
videos = list.map((e) => SkywoodDrama.fromJson(e)).toList();
|
||||
}
|
||||
} else if (data is List) {
|
||||
// 情况2: data 直接就是 List
|
||||
videos = data.map((e) => SkywoodDrama.fromJson(e)).toList();
|
||||
}
|
||||
return SkywoodHome(
|
||||
moduleKey: json['module_key'] as String?,
|
||||
dataList: videos,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {'module_key': moduleKey, 'dataList': dataList};
|
||||
}
|
||||
|
||||
SkywoodHome copyWith({String? moduleKey, dynamic data}) {
|
||||
return SkywoodHome(
|
||||
moduleKey: moduleKey ?? this.moduleKey,
|
||||
dataList: data ?? dataList,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
bool parseBool(dynamic value) {
|
||||
if (value == null) return false;
|
||||
if (value is bool) return value;
|
||||
if (value is num) return value != 0;
|
||||
if (value is String) {
|
||||
final v = value.trim().toLowerCase();
|
||||
return v == 'true' || v == '1' || v == 'yes' || v == 'y';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int parseInt(dynamic value) {
|
||||
if (value == null) return 0;
|
||||
if (value is int) return value;
|
||||
if (value is double) return value.toInt();
|
||||
if (value is num) return value.toInt();
|
||||
if (value is String) return int.tryParse(value) ?? 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
String parseString(dynamic value) {
|
||||
if (value == null) return '';
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
List<String>? parseStringList(dynamic value) {
|
||||
if (value == null) return null;
|
||||
if (value is List) {
|
||||
return value.map((item) => parseString(item)).toList();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
List<int>? parseIntList(dynamic value) {
|
||||
if (value == null) return null;
|
||||
if (value is List) {
|
||||
return value.map((item) => parseInt(item)).toList();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Map<String, dynamic>? parseMap(dynamic value) {
|
||||
if (value is Map<String, dynamic>) return value;
|
||||
if (value is Map) return Map<String, dynamic>.from(value);
|
||||
return null;
|
||||
}
|
||||
|
||||
List<T> parseModelList<T>(
|
||||
dynamic value,
|
||||
T Function(Map<String, dynamic> json) fromJson,
|
||||
) {
|
||||
if (value is! List) return <T>[];
|
||||
return value
|
||||
.whereType<Map>()
|
||||
.map((item) => fromJson(Map<String, dynamic>.from(item)))
|
||||
.toList();
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
import '../model_parser.dart';
|
||||
|
||||
class GlimzoUser {
|
||||
final String customerId;
|
||||
final bool isTourist;
|
||||
final String userLevel;
|
||||
final String avator;
|
||||
final String? familyName;
|
||||
final String? givingName;
|
||||
|
||||
const GlimzoUser({
|
||||
required this.customerId,
|
||||
required this.isTourist,
|
||||
required this.userLevel,
|
||||
required this.avator,
|
||||
this.familyName,
|
||||
this.givingName,
|
||||
});
|
||||
|
||||
factory GlimzoUser.fromJson(Map<String, dynamic> json) {
|
||||
return GlimzoUser(
|
||||
customerId: parseString(json['customer_id']),
|
||||
isTourist: parseBool(json['is_tourist']),
|
||||
userLevel: parseString(json['user_level']),
|
||||
avator: parseString(json['avator']),
|
||||
familyName: json['family_name'] as String?,
|
||||
givingName: parseString(json['giving_name']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'customer_id': customerId,
|
||||
'is_tourist': isTourist,
|
||||
'user_level': userLevel,
|
||||
'avator': avator,
|
||||
'family_name': familyName,
|
||||
'giving_name': givingName,
|
||||
};
|
||||
}
|
||||
|
||||
GlimzoUser copyWith({
|
||||
String? customerId,
|
||||
bool? isTourist,
|
||||
String? userLevel,
|
||||
String? avator,
|
||||
String? familyName,
|
||||
String? givingName,
|
||||
}) {
|
||||
return GlimzoUser(
|
||||
customerId: customerId ?? this.customerId,
|
||||
isTourist: isTourist ?? this.isTourist,
|
||||
userLevel: userLevel ?? this.userLevel,
|
||||
avator: avator ?? this.avator,
|
||||
familyName: familyName ?? this.familyName,
|
||||
givingName: givingName ?? this.givingName,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
class RegisterBean {
|
||||
final String token;
|
||||
final int customerId;
|
||||
final bool? autoLogin;
|
||||
final int touristId;
|
||||
|
||||
RegisterBean({required this.token, required this.customerId, this.autoLogin, required this.touristId});
|
||||
|
||||
factory RegisterBean.fromJson(Map<String, dynamic> json) {
|
||||
return RegisterBean(
|
||||
token: json['token'],
|
||||
customerId: json['customer_id'],
|
||||
autoLogin: json['auto_login'],
|
||||
touristId: json['tourist_id'],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user