import 'dart:convert'; import 'package:in_app_purchase/in_app_purchase.dart'; /// id : 93 /// status : "enable" /// price : "59.99" /// coins : 6000 /// send_coins : 6000 /// buy_type : "coins" /// sort : 12 /// description : "" /// vip_type : "" /// title : "59.99 for coins" /// brief : "" /// created_at : "2025-04-15 07:01:47" /// origin_price : "0.00" /// backhaul_price : "59.99" /// ios_template_id : "coins_59.99" /// android_template_id : "coins_59.99" /// currency : "US$" /// updated_at : "2025-07-02 06:48:47" /// translate_key : "" /// platform : "all" /// lang_id : 0 /// corner_marker : "Popularity" /// first_promotion_price : "0.00" /// version : 2 /// user_level : "high" /// vip_days : 0 /// user_promise_level : "" /// use_once : 0 /// send_coin_ttl : 1 /// backhaul_percent : 100 /// pay_template_id : 2 /// deleted_at : "" /// pay_product_id : 14 /// ext_info : "{\"size\": \"big\", \"backhaul_percent_conf\": []}" /// factor : "1.00" /// short_type : "" /// vip_type_key : "" /// auto_sub : "Automatic renewal, cancel at any time" /// size : "big" KtGoodsBean ktGoodsBeanFromJson(String str) => KtGoodsBean.fromJson(json.decode(str)); String ktGoodsBeanToJson(KtGoodsBean data) => json.encode(data.toJson()); class KtGoodsBean { KtGoodsBean({ int? id, String? status, String? price, int? coins, int? sendCoins, String? buyType, int? sort, String? description, String? vipType, String? title, String? brief, String? createdAt, String? originPrice, String? backhaulPrice, String? iosTemplateId, String? androidTemplateId, String? currency, String? updatedAt, String? translateKey, String? platform, int? langId, String? cornerMarker, String? firstPromotionPrice, int? version, String? userLevel, int? vipDays, String? userPromiseLevel, int? useOnce, int? sendCoinTtl, int? backhaulPercent, int? payTemplateId, String? deletedAt, int? payProductId, ExtInfo? extInfo, String? factor, String? shortType, String? vipTypeKey, String? autoSub, String? size, String? orderCode, String? transactionId, String? serverVerificationData, ProductDetails? productDetails, }) { _id = id; _status = status; _price = price; _coins = coins; _sendCoins = sendCoins; _buyType = buyType; _sort = sort; _description = description; _vipType = vipType; _title = title; _brief = brief; _createdAt = createdAt; _originPrice = originPrice; _backhaulPrice = backhaulPrice; _iosTemplateId = iosTemplateId; _androidTemplateId = androidTemplateId; _currency = currency; _updatedAt = updatedAt; _translateKey = translateKey; _platform = platform; _langId = langId; _cornerMarker = cornerMarker; _firstPromotionPrice = firstPromotionPrice; _version = version; _userLevel = userLevel; _vipDays = vipDays; _userPromiseLevel = userPromiseLevel; _useOnce = useOnce; _sendCoinTtl = sendCoinTtl; _backhaulPercent = backhaulPercent; _payTemplateId = payTemplateId; _deletedAt = deletedAt; _payProductId = payProductId; _extInfo = extInfo; _factor = factor; _shortType = shortType; _vipTypeKey = vipTypeKey; _autoSub = autoSub; _size = size; _orderCode = orderCode; _transactionId = transactionId; _serverVerificationData = serverVerificationData; _productDetails = productDetails; } KtGoodsBean.fromJson(dynamic json) { _id = json['id']; _status = json['status']; _price = json['price']; _coins = json['coins']; _sendCoins = json['send_coins']; _buyType = json['buy_type']; _sort = json['sort']; _description = json['description']; _vipType = json['vip_type']; _title = json['title']; _brief = json['brief']; _createdAt = json['created_at']; _originPrice = json['origin_price']; _backhaulPrice = json['backhaul_price']; _iosTemplateId = json['ios_template_id']; _androidTemplateId = json['android_template_id']; _currency = json['currency']; _updatedAt = json['updated_at']; _translateKey = json['translate_key']; _platform = json['platform']; _langId = json['lang_id']; _cornerMarker = json['corner_marker']; _firstPromotionPrice = json['first_promotion_price']; _version = json['version']; _userLevel = json['user_level']; _vipDays = json['vip_days']; _userPromiseLevel = json['user_promise_level']; _useOnce = json['use_once']; _sendCoinTtl = json['send_coin_ttl']; _backhaulPercent = json['backhaul_percent']; _payTemplateId = json['pay_template_id']; _deletedAt = json['deleted_at']; _payProductId = json['pay_product_id']; _extInfo = json['ext_info'] != null ? ExtInfo.fromJson(json['ext_info']) : null; _factor = json['factor']; _shortType = json['short_type']; _vipTypeKey = json['vip_type_key']; _autoSub = json['auto_sub']; _size = json['size']; _orderCode = json['orderCode']; _transactionId = json['transactionId']; _serverVerificationData = json['serverVerificationData']; _productDetails = json['productDetails']; } int? _id; String? _status; String? _price; int? _coins; int? _sendCoins; String? _buyType; int? _sort; String? _description; String? _vipType; String? _title; String? _brief; String? _createdAt; String? _originPrice; String? _backhaulPrice; String? _iosTemplateId; String? _androidTemplateId; String? _currency; String? _updatedAt; String? _translateKey; String? _platform; int? _langId; String? _cornerMarker; String? _firstPromotionPrice; int? _version; String? _userLevel; int? _vipDays; String? _userPromiseLevel; int? _useOnce; int? _sendCoinTtl; int? _backhaulPercent; int? _payTemplateId; String? _deletedAt; int? _payProductId; ExtInfo? _extInfo; String? _factor; String? _shortType; String? _vipTypeKey; String? _autoSub; String? _size; String? _orderCode; String? _transactionId; String? _serverVerificationData; ProductDetails? _productDetails; KtGoodsBean copyWith({ int? id, String? status, String? price, int? coins, int? sendCoins, String? buyType, int? sort, String? description, String? vipType, String? title, String? brief, String? createdAt, String? originPrice, String? backhaulPrice, String? iosTemplateId, String? androidTemplateId, String? currency, String? updatedAt, String? translateKey, String? platform, int? langId, String? cornerMarker, String? firstPromotionPrice, int? version, String? userLevel, int? vipDays, String? userPromiseLevel, int? useOnce, int? sendCoinTtl, int? backhaulPercent, int? payTemplateId, String? deletedAt, int? payProductId, ExtInfo? extInfo, String? factor, String? shortType, String? vipTypeKey, String? autoSub, String? size, String? orderCode, String? transactionId, String? serverVerificationData, ProductDetails? productDetails, }) => KtGoodsBean( id: id ?? _id, status: status ?? _status, price: price ?? _price, coins: coins ?? _coins, sendCoins: sendCoins ?? _sendCoins, buyType: buyType ?? _buyType, sort: sort ?? _sort, description: description ?? _description, vipType: vipType ?? _vipType, title: title ?? _title, brief: brief ?? _brief, createdAt: createdAt ?? _createdAt, originPrice: originPrice ?? _originPrice, backhaulPrice: backhaulPrice ?? _backhaulPrice, iosTemplateId: iosTemplateId ?? _iosTemplateId, androidTemplateId: androidTemplateId ?? _androidTemplateId, currency: currency ?? _currency, updatedAt: updatedAt ?? _updatedAt, translateKey: translateKey ?? _translateKey, platform: platform ?? _platform, langId: langId ?? _langId, cornerMarker: cornerMarker ?? _cornerMarker, firstPromotionPrice: firstPromotionPrice ?? _firstPromotionPrice, version: version ?? _version, userLevel: userLevel ?? _userLevel, vipDays: vipDays ?? _vipDays, userPromiseLevel: userPromiseLevel ?? _userPromiseLevel, useOnce: useOnce ?? _useOnce, sendCoinTtl: sendCoinTtl ?? _sendCoinTtl, backhaulPercent: backhaulPercent ?? _backhaulPercent, payTemplateId: payTemplateId ?? _payTemplateId, deletedAt: deletedAt ?? _deletedAt, payProductId: payProductId ?? _payProductId, extInfo: extInfo ?? _extInfo, factor: factor ?? _factor, shortType: shortType ?? _shortType, vipTypeKey: vipTypeKey ?? _vipTypeKey, autoSub: autoSub ?? _autoSub, size: size ?? _size, orderCode: orderCode ?? _orderCode, transactionId: transactionId ?? _transactionId, serverVerificationData: serverVerificationData ?? _serverVerificationData, productDetails: productDetails ?? _productDetails, ); int? get id => _id; String? get status => _status; String? get price => _price; int? get coins => _coins; int? get sendCoins => _sendCoins; String? get buyType => _buyType; int? get sort => _sort; String? get description => _description; String? get vipType => _vipType; String? get title => _title; String? get brief => _brief; String? get createdAt => _createdAt; String? get originPrice => _originPrice; String? get backhaulPrice => _backhaulPrice; String? get iosTemplateId => _iosTemplateId; String? get androidTemplateId => _androidTemplateId; String? get currency => _currency; String? get updatedAt => _updatedAt; String? get translateKey => _translateKey; String? get platform => _platform; int? get langId => _langId; String? get cornerMarker => _cornerMarker; String? get firstPromotionPrice => _firstPromotionPrice; int? get version => _version; String? get userLevel => _userLevel; int? get vipDays => _vipDays; String? get userPromiseLevel => _userPromiseLevel; int? get useOnce => _useOnce; int? get sendCoinTtl => _sendCoinTtl; int? get backhaulPercent => _backhaulPercent; int? get payTemplateId => _payTemplateId; String? get deletedAt => _deletedAt; int? get payProductId => _payProductId; ExtInfo? get extInfo => _extInfo; String? get factor => _factor; String? get shortType => _shortType; String? get vipTypeKey => _vipTypeKey; String? get autoSub => _autoSub; String? get size => _size; String? get orderCode => _orderCode; String? get transactionId => _transactionId; String? get serverVerificationData => _serverVerificationData; ProductDetails? get productDetails => _productDetails; // set方法补充 set id(int? value) => _id = value; set status(String? value) => _status = value; set price(String? value) => _price = value; set coins(int? value) => _coins = value; set sendCoins(int? value) => _sendCoins = value; set buyType(String? value) => _buyType = value; set sort(int? value) => _sort = value; set description(String? value) => _description = value; set vipType(String? value) => _vipType = value; set title(String? value) => _title = value; set brief(String? value) => _brief = value; set createdAt(String? value) => _createdAt = value; set originPrice(String? value) => _originPrice = value; set backhaulPrice(String? value) => _backhaulPrice = value; set iosTemplateId(String? value) => _iosTemplateId = value; set androidTemplateId(String? value) => _androidTemplateId = value; set currency(String? value) => _currency = value; set updatedAt(String? value) => _updatedAt = value; set translateKey(String? value) => _translateKey = value; set platform(String? value) => _platform = value; set langId(int? value) => _langId = value; set cornerMarker(String? value) => _cornerMarker = value; set firstPromotionPrice(String? value) => _firstPromotionPrice = value; set version(int? value) => _version = value; set userLevel(String? value) => _userLevel = value; set vipDays(int? value) => _vipDays = value; set userPromiseLevel(String? value) => _userPromiseLevel = value; set useOnce(int? value) => _useOnce = value; set sendCoinTtl(int? value) => _sendCoinTtl = value; set backhaulPercent(int? value) => _backhaulPercent = value; set payTemplateId(int? value) => _payTemplateId = value; set deletedAt(String? value) => _deletedAt = value; set payProductId(int? value) => _payProductId = value; set extInfo(ExtInfo? value) => _extInfo = value; set factor(String? value) => _factor = value; set shortType(String? value) => _shortType = value; set vipTypeKey(String? value) => _vipTypeKey = value; set autoSub(String? value) => _autoSub = value; set size(String? value) => _size = value; set orderCode(String? value) => _orderCode = value; set transactionId(String? value) => _transactionId = value; set serverVerificationData(String? value) => _serverVerificationData = value; set productDetails(ProductDetails? value) => _productDetails = value; Map toJson() { final map = {}; map['id'] = _id; map['status'] = _status; map['price'] = _price; map['coins'] = _coins; map['send_coins'] = _sendCoins; map['buy_type'] = _buyType; map['sort'] = _sort; map['description'] = _description; map['vip_type'] = _vipType; map['title'] = _title; map['brief'] = _brief; map['created_at'] = _createdAt; map['origin_price'] = _originPrice; map['backhaul_price'] = _backhaulPrice; map['ios_template_id'] = _iosTemplateId; map['android_template_id'] = _androidTemplateId; map['currency'] = _currency; map['updated_at'] = _updatedAt; map['translate_key'] = _translateKey; map['platform'] = _platform; map['lang_id'] = _langId; map['corner_marker'] = _cornerMarker; map['first_promotion_price'] = _firstPromotionPrice; map['version'] = _version; map['user_level'] = _userLevel; map['vip_days'] = _vipDays; map['user_promise_level'] = _userPromiseLevel; map['use_once'] = _useOnce; map['send_coin_ttl'] = _sendCoinTtl; map['backhaul_percent'] = _backhaulPercent; map['pay_template_id'] = _payTemplateId; map['deleted_at'] = _deletedAt; map['pay_product_id'] = _payProductId; if (_extInfo != null) { map['ext_info'] = _extInfo?.toJson(); } map['factor'] = _factor; map['short_type'] = _shortType; map['vip_type_key'] = _vipTypeKey; map['auto_sub'] = _autoSub; map['size'] = _size; map['serverVerificationData'] = _serverVerificationData; map['transactionId'] = _transactionId; map['orderCode'] = _orderCode; // map['productDetails'] = _productDetails; return map; } } /// size : "small" /// extra_coins : 0 /// max_total_coins : 0 /// max_total_coins_pop : 0 /// is_vip_show : false /// receive_coins_rate : 85 /// extra_day_coins : 85 /// sub_coins_txt_list : ["",""] /// backhaul_percent_conf : [{"episode_num":50,"backhaul_percent":50},{"episode_num":80,"backhaul_percent":80}] ExtInfo extInfoFromJson(String str) => ExtInfo.fromJson(json.decode(str)); String extInfoToJson(ExtInfo data) => json.encode(data.toJson()); class ExtInfo { ExtInfo({ String? size, int? maxTotalCoins, int? maxTotalCoinsPop, int? extraCoins, bool? isVipShow = false, String? receiveCoinsRate, int? extraDayCoins, bool? coinsWinBackShow, List? subCoinsTxtList, List? backhaulPercentConf, }) { _size = size; _maxTotalCoins = maxTotalCoins; _maxTotalCoinsPop = maxTotalCoinsPop; _extraCoins = extraCoins; _isVipShow = isVipShow; _receiveCoinsRate = receiveCoinsRate; _extraDayCoins = extraDayCoins; _coinsWinBackShow = coinsWinBackShow; _subCoinsTxtList = subCoinsTxtList; _backhaulPercentConf = backhaulPercentConf; } ExtInfo.fromJson(dynamic json) { _size = json['size']; _maxTotalCoins = json['max_total_coins']; _maxTotalCoinsPop = json['max_total_coins_pop']; _isVipShow = json['is_vip_show']; _receiveCoinsRate = json['receive_coins_rate']; _extraDayCoins = json['extra_day_coins']; _extraCoins = json['extra_coins']; _coinsWinBackShow = json['coins_win_back_show']; _subCoinsTxtList = json['sub_coins_txt_list'] != null ? json['sub_coins_txt_list'].cast() : []; if (json['backhaul_percent_conf'] != null) { _backhaulPercentConf = []; json['backhaul_percent_conf'].forEach((v) { _backhaulPercentConf?.add(BackhaulPercentConf.fromJson(v)); }); } } String? _size; int? _extraCoins; int? _maxTotalCoins; int? _maxTotalCoinsPop; String? _receiveCoinsRate; int? _extraDayCoins; bool? _isVipShow; bool? _coinsWinBackShow; List? _subCoinsTxtList; List? _backhaulPercentConf; ExtInfo copyWith({ String? size, int? extraCoins, int? maxTotalCoins, int? maxTotalCoinsPop, String? receiveCoinsRate, int? extraDayCoins, bool? coinsWinBackShow, bool? isVipShow, List? subCoinsTxtList, List? backhaulPercentConf, }) => ExtInfo( size: size ?? _size, maxTotalCoins: maxTotalCoins ?? _maxTotalCoins, maxTotalCoinsPop: maxTotalCoinsPop ?? _maxTotalCoinsPop, receiveCoinsRate: receiveCoinsRate ?? _receiveCoinsRate, extraDayCoins: extraDayCoins ?? _extraDayCoins, isVipShow: isVipShow ?? _isVipShow, extraCoins: extraCoins ?? _extraCoins, coinsWinBackShow: coinsWinBackShow ?? _coinsWinBackShow, subCoinsTxtList: subCoinsTxtList ?? _subCoinsTxtList, backhaulPercentConf: backhaulPercentConf ?? _backhaulPercentConf, ); String? get size => _size; int? get extraCoins => _extraCoins; int? get maxTotalCoins => _maxTotalCoins; int? get maxTotalCoinsPop => _maxTotalCoinsPop; String? get receiveCoinsRate => _receiveCoinsRate; int? get extraDayCoins => _extraDayCoins; bool? get coinsWinBackShow => _coinsWinBackShow; bool? get isVipShow => _isVipShow; List? get subCoinsTxtList => _subCoinsTxtList; List? get backhaulPercentConf => _backhaulPercentConf; Map toJson() { final map = {}; map['size'] = _size; map['max_total_coins'] = _maxTotalCoins; map['max_total_coins_pop'] = _maxTotalCoinsPop; map['receive_coins_rate'] = _receiveCoinsRate; map['extra_day_coins'] = _extraDayCoins; map['is_vip_show'] = _isVipShow; map['extra_coins'] = _extraCoins; map['coins_win_back_show'] = _coinsWinBackShow; map['sub_coins_txt_list'] = _subCoinsTxtList; if (_backhaulPercentConf != null) { map['backhaul_percent_conf'] = _backhaulPercentConf?.map((v) => v.toJson()).toList(); } return map; } } /// episode_num : 50 /// backhaul_percent : 50 BackhaulPercentConf backhaulPercentConfFromJson(String str) => BackhaulPercentConf.fromJson(json.decode(str)); String backhaulPercentConfToJson(BackhaulPercentConf data) => json.encode(data.toJson()); class BackhaulPercentConf { BackhaulPercentConf({int? episodeNum, int? backhaulPercent}) { _episodeNum = episodeNum; _backhaulPercent = backhaulPercent; } BackhaulPercentConf.fromJson(dynamic json) { _episodeNum = json['episode_num']; _backhaulPercent = json['backhaul_percent']; } int? _episodeNum; int? _backhaulPercent; BackhaulPercentConf copyWith({int? episodeNum, int? backhaulPercent}) => BackhaulPercentConf(episodeNum: episodeNum ?? _episodeNum, backhaulPercent: backhaulPercent ?? _backhaulPercent); int? get episodeNum => _episodeNum; int? get backhaulPercent => _backhaulPercent; Map toJson() { final map = {}; map['episode_num'] = _episodeNum; map['backhaul_percent'] = _backhaulPercent; return map; } }