You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.2 KiB
113 lines
3.2 KiB
import 'package:get/get.dart';
|
|
import '../../../data/models/goods.dart';
|
|
|
|
String _uiLanguage() => Get.locale?.languageCode ?? 'zh';
|
|
|
|
String localizedGoodsName(DBGoods item) {
|
|
final info = item.localeForLanguage(_uiLanguage());
|
|
final ln = (info['name'] as String?)?.trim() ?? '';
|
|
if (ln.isNotEmpty) return ln;
|
|
final id = item.id.trim();
|
|
switch (id) {
|
|
case 'ai_001':
|
|
return 'ai_001_name'.tr;
|
|
case 'ai_002':
|
|
return 'ai_002_name'.tr;
|
|
case 'ai_003':
|
|
return 'ai_003_name'.tr;
|
|
case 'meet_001':
|
|
return 'meet_001_name'.tr;
|
|
case 'meet_002':
|
|
return 'meet_002_name'.tr;
|
|
case 'meet_003':
|
|
return 'meet_003_name'.tr;
|
|
case 'trade_001':
|
|
return 'trans_001_name'.tr;
|
|
case 'trade_002':
|
|
return 'trans_002_name'.tr;
|
|
case 'trade_003':
|
|
return 'trans_003_name'.tr;
|
|
default:
|
|
final name = item.name.trim();
|
|
return name.isNotEmpty ? name : 'unknown'.tr;
|
|
}
|
|
}
|
|
|
|
String localizedGoodsDesc(DBGoods item) {
|
|
final id = item.id.trim();
|
|
|
|
switch (id) {
|
|
case 'ai_001':
|
|
return 'ai_001_desc'.tr;
|
|
case 'ai_002':
|
|
return 'ai_002_desc'.tr;
|
|
case 'ai_003':
|
|
return 'ai_003_desc'.tr;
|
|
case 'meet_001':
|
|
return 'meet_001_desc'.tr;
|
|
case 'meet_002':
|
|
return 'meet_002_desc'.tr;
|
|
case 'meet_003':
|
|
return 'meet_003_desc'.tr;
|
|
case 'trade_001':
|
|
return 'trans_001_desc'.tr;
|
|
case 'trade_002':
|
|
return 'trans_002_desc'.tr;
|
|
case 'trade_003':
|
|
return 'trans_003_desc'.tr;
|
|
default:
|
|
return '';
|
|
}
|
|
}
|
|
|
|
String _trimAmount(double v) {
|
|
final fixed = v.toStringAsFixed(2);
|
|
return fixed.replaceFirst(RegExp(r'\.?0+$'), '');
|
|
}
|
|
|
|
String goodsDisplayPrice(DBGoods item) {
|
|
final lang = _uiLanguage();
|
|
final info = item.localeForLanguage(lang);
|
|
final cur = (info['currency'] as String?)?.trim();
|
|
final p = info['price'];
|
|
final symbol = (cur != null && cur.isNotEmpty)
|
|
? cur
|
|
: (lang == 'zh' ? '¥' : r'$');
|
|
double v;
|
|
if (p is num) {
|
|
v = p.toDouble();
|
|
} else {
|
|
v = item.priceYuan;
|
|
}
|
|
return '$symbol${_trimAmount(v)}';
|
|
}
|
|
|
|
/// 这一档自己的服务说明:天数和算力都取商品本身,不跟账号当前状态混在一起。
|
|
/// 一年及以上按终生,显示无限。算力为 0 也照实写,避免三档看起来发了同一份。
|
|
List<String> vipOfferFacts(DBGoods item) {
|
|
final zh = _uiLanguage() == 'zh';
|
|
final lines = <String>[];
|
|
final days = item.viptime;
|
|
if (days >= 365) {
|
|
lines.add(zh ? '到期时间:无限' : 'Expires: unlimited');
|
|
} else if (days > 0) {
|
|
lines.add(zh ? '到期时间:$days 天' : 'Expires: $days days');
|
|
}
|
|
lines.add(zh ? '算力:${item.compute}' : 'Compute: ${item.compute}');
|
|
return lines;
|
|
}
|
|
|
|
/// 会员页三档标题。中文是人民币,其它语言用美元价。
|
|
String vipOfferTitle(String tier, String price) {
|
|
final zh = _uiLanguage() == 'zh';
|
|
switch (tier) {
|
|
case 'month':
|
|
return zh ? '月度$price VIP充值' : 'Monthly $price VIP';
|
|
case 'quarter':
|
|
return zh ? '季度$price VIP充值' : 'Quarterly $price VIP';
|
|
case 'lifetime':
|
|
return zh ? '终生$price VIP充值' : 'Lifetime $price VIP';
|
|
default:
|
|
return price;
|
|
}
|
|
}
|
|
|