import 'package:hgdj/assets_tool/images.dart'; /// 用户信息 class UserInfoModel { // —— 基础资料 —— int? uid; // 用户ID String? name; // 昵称 String? portrait; // 头像 String? gender; // 性别 String? summary; // 个性签名 String? mobile; // 手机号 int? urrPortraitStatus; // 头像审核状态 // —— 账号 / 登录 —— String? token; // 登录 token String? devID; // 设备 ID String? createdAt; // 注册时间 String? districtCode; // 渠道码 // —— 社交统计 —— int? fans; // 粉丝数 int? likeCount; // 获赞数 bool? isFollow; // 是否已关注 // —— 会员 / VIP —— bool? isVip; // 是否会员 int? vipLevel; // 会员等级 1-影片会员 2-ACG会员 3-超级会员(一卡通) String? vipName; // 会员名称 String? vipExpireDate; // 会员到期时间 bool? isUpgrade; // 是否可升级 // —— 推广 / 邀请 —— String? promoteURL; // 推广链接 String? promotionCode; // 我的邀请码 String? inviterCode; // 邀请人邀请码 // —— 金币 / 观影券 / 权益 —— bool allGoldVideoFree = false; // 是否全场金币视频免费 String? goldVideoFreeExpire; // 金币视频免费权益到期时间 List? goldVideoCoupon; // 观影券列表 String? broadcastExpire; // 直播观看权益有效期 String? dramaExpire; // 短剧卡到期时间,晚于当前时间就是有短剧权益 int? payVidDiscount; // 付费视频折扣 // —— 创作 / 等级 —— int? vidUploadCount; // 视频上传数 int? coverUploadCount; // 封面上传数 int? level; // 当前等级 // —— 状态 / 权限 —— int? adverAbTestShowType; // 广告AB -1-首次进app免广告 0-全部展示 其他N-注册后N分钟内免广告(分层后固定不变) // ============ 计算属性 ============ /// 观影券总数量 int get couponCount => (goldVideoCoupon ?? []).fold(0, (sum, e) => sum + (e.count ?? 0)); /// 可解锁该金币视频的观影券面额:券面额需 >= 视频金币,都不够就退回第一张 int? couponGold(int? originCoins) { final coupons = goldVideoCoupon ?? []; for (final coupon in coupons) { if ((coupon.gold ?? 0) >= (originCoins ?? 0)) return coupon.gold ?? 0; } return coupons.isEmpty ? null : coupons.first.gold; } /// 作品总数(视频上传 + 封面上传) int get totalWorkCount => (vidUploadCount ?? 0) + (coverUploadCount ?? 0); /// 会员等级对应的角标图片;等级 1~4,0 级(含推广会员)无角标 String get vipImageName { final level = vipLevel ?? 0; if (level < 1) return ""; return "vip_${level.clamp(1, 4)}.webp".mineImgPath; } /// 是否充值会员 bool get isRechargeVIP => (isVip ?? false) && (vipLevel ?? 0) > 0; // ============ 序列化 ============ UserInfoModel.fromJson(Map? map) { map ??= {}; uid = map['uid']; name = map['name']; portrait = map['portrait']; gender = map['gender']; summary = map['summary']; mobile = map['mobile']; urrPortraitStatus = map['urrPortraitStatus']; token = map['token']; devID = map['devID']; createdAt = map['createdAt']; districtCode = map['districtCode']; fans = map['fans']; likeCount = map['likeCount']; isFollow = map['isFollow']; isVip = map['isVip']; vipLevel = map['vipLevel']; vipName = map['vipName']; vipExpireDate = map['vipExpireDate']; isUpgrade = map['isUpgrade']; promoteURL = map['promoteURL']; promotionCode = map['promotionCode']; inviterCode = map['inviterCode']; allGoldVideoFree = map['allGoldVideoFree'] ?? false; goldVideoFreeExpire = map['goldVideoFreeExpire']; goldVideoCoupon = (map['goldVideoCoupon'] as List?) ?.map((o) => MyCoupon.fromJson(o)) .toList(); broadcastExpire = map['broadcastExpire']; dramaExpire = map['dramaExpire']; payVidDiscount = map['payVidDiscount']; vidUploadCount = map['vidUploadCount']; coverUploadCount = map['coverUploadCount']; level = map['level']; adverAbTestShowType = map['adverAbTestShowType']; } } /// 观影券 class MyCoupon { int? gold; // 券面额(金币) int? count; // 数量 MyCoupon.fromJson(Map? map) { map ??= {}; gold = map['gold']; count = map['count']; } }