// 音色项类 import 'package:get/get.dart'; class TimbreItem { final String timbre; final String name; final String timbrePackUrl; TimbreItem({ required this.timbre, required this.name, required this.timbrePackUrl, }); factory TimbreItem.fromJson(Map json) { return TimbreItem( timbre: json['timbre'] ?? '', name: json['name'] ?? '', timbrePackUrl: json['timbrePackUrl'] ?? '', ); } Map toJson() { return { 'timbre': timbre, 'name': name, 'timbrePackUrl': timbrePackUrl, }; } @override String toString() { return 'TimbreItem{timbre: $timbre, name: $name, timbrePackUrl: $timbrePackUrl}'; } } // 透传项主类 class PassthroughItem { final String lang; final List timbres; PassthroughItem({ required this.lang, required this.timbres, }); factory PassthroughItem.fromJson(Map json) { var timbresJson = json['timbres'] as List?; List timbresList = timbresJson != null ? timbresJson .map((e) => TimbreItem.fromJson(e as Map)) .toList() : []; return PassthroughItem( lang: json['lang'] ?? '', timbres: timbresList, ); } Map toJson() { return { 'lang': lang, 'timbres': timbres.map((e) => e.toJson()).toList(), }; } @override String toString() { return 'PassthroughItem{lang: $lang, timbres: $timbres}'; } } class PassthroughListResponse { PassthroughListResponse({ this.description, this.errorCode, this.data, this.errorMsg, }); String? description; int? errorCode; List? data; String? errorMsg; PassthroughListResponse.fromJson(dynamic json) { description = json['description']; errorCode = json['errorCode']; if (json['data'] != null && json['data'] is List) { data = (json['data'] as List) .map((e) => PassthroughItem.fromJson(e as Map)) .toList(); } else { data = null; } errorMsg = json['errorMsg']; } Map toJson() { final map = {}; map['description'] = description; map['errorCode'] = errorCode; if (data != null) { map['data'] = data!.map((e) => e.toJson()).toList(); } map['errorMsg'] = errorMsg; return map; } } /// 工具方法:通过语言编码获取本地化文本 /// 例如:'zh_CN' -> '简体中文'.tr,'en_US' -> '英文'.tr class PassthroughLangHelper { static String getLangText(String langCode) { switch (langCode.toLowerCase()) { case 'zh_cn': return '简体中文'.tr; case 'zh_tw': return '繁体中文(中国台湾)'.tr; case 'zh_hk': return '繁体中文(中国香港)'.tr; case 'en_us': return '英文'.tr; case 'fr_fr': return '法语'.tr; case 'ru_ru': return '俄语'.tr; case 'de_de': return '德语'.tr; case 'ja_jp': return '日语'.tr; case 'ko_kr': return '韩语'.tr; case 'it_it': return '意大利语'.tr; case 'pt_pt': return '葡萄牙语'.tr; case 'es_es': return '西班牙语'.tr; case 'ar_sa': return '阿拉伯语'.tr; case 'vi_vn': return '越南语'.tr; case 'ms_my': return '马来语'.tr; case 'nl_nl': return '荷兰语'.tr; case 'ro_ro': return '罗马尼亚语'.tr; case 'lt_lt': return '立陶宛语'.tr; case 'sv_se': return '瑞典语'.tr; case 'et_ee': return '爱沙尼亚语'.tr; case 'pl_pl': return '波兰语'.tr; case 'sk_sk': return '斯洛伐克语'.tr; case 'cs_cz': return '捷克语'.tr; case 'el_gr': return '希腊语'.tr; case 'he_il': return '希伯来语'.tr; case 'sr_rs': return '塞尔维亚语'.tr; case 'tr_tr': return '土耳其语'.tr; case 'hu_hu': return '匈牙利语'.tr; case 'bg_bg': return '保加利亚语'.tr; case 'kk_kz': return '哈萨克斯坦语'.tr; case 'bn_bd': return '孟加拉语'.tr; case 'hr_hr': return '克罗地亚语'.tr; case 'th_th': return '泰语'.tr; case 'id_id': return '印度尼西亚语'.tr; case 'fi_fi': return '芬兰语'.tr; case 'da_dk': return '丹麦语'.tr; case 'uk_ua': return '乌克兰语'.tr; case 'hi_in': return '印地语'.tr; case 'ur_pk': return '乌尔都语'.tr; case 'hy_am': return '亚美尼亚语'.tr; case 'ka_ge': return '格鲁吉亚语'.tr; default: return '未知语言'.tr; } } } class ValidityPeriodResponse { ValidityPeriodResponse({ this.description, this.errorCode, this.data, this.errorMsg, }); String? description; int? errorCode; ValidityPeriod? data; String? errorMsg; ValidityPeriodResponse.fromJson(dynamic json) { description = json['description']; errorCode = json['errorCode']; if (json['data'] != null) { data = ValidityPeriod.fromJson(json['data']); } else { data = null; } errorMsg = json['errorMsg']; } Map toJson() { final map = {}; map['description'] = description; map['errorCode'] = errorCode; if (data != null) { map['data'] = data!.toJson(); } map['errorMsg'] = errorMsg; return map; } } class ValidityPeriod { final int lockId; final int status; final String validityPeriodStart; final String validityPeriodEnd; final int rollingStorageDays; final int remainingDays; ValidityPeriod({ required this.lockId, required this.status, required this.validityPeriodStart, required this.validityPeriodEnd, required this.rollingStorageDays, required this.remainingDays, }); // 反序列化方法 factory ValidityPeriod.fromJson(Map json) { return ValidityPeriod( lockId: json['lockId'] as int? ?? 0, // 默认值为 0 status: json['status'] as int? ?? 0, validityPeriodStart: json['validityPeriodStart'] as String? ?? '', validityPeriodEnd: json['validityPeriodEnd'] as String? ?? '', rollingStorageDays: json['rollingStorageDays'] as int? ?? 0, remainingDays: json['remainingDays'] as int? ?? 0, ); } // 序列化方法 Map toJson() { return { 'lockId': lockId, 'status': status, 'validityPeriodStart': validityPeriodStart, 'validityPeriodEnd': validityPeriodEnd, 'rollingStorageDays': rollingStorageDays, 'remainingDays': remainingDays, }; } }