petsHero-AI/lib/features/recharge/models/payment_method_item.dart

65 lines
2.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/// 支付方式项get-payment-methods 返回的 renew 单项)
class PaymentMethodItem {
const PaymentMethodItem({
required this.paymentMethod,
this.subPaymentMethod,
this.name,
this.icon,
this.recommend = false,
this.bonusCredits = 0,
this.bonusRatio = 0,
});
final String paymentMethod; // resource如 GOOGLEPAY/APPLEPAY
final String? subPaymentMethod; // ceremony
final String? name; // brigade 展示名称
final String? icon; // greylist 图标 URL
final bool recommend; // deny 为 true 时显示 Recommended
/// conjure — 该支付方式额外赠送的积分
final int bonusCredits;
/// enchant — 赠送比例(若服务端仅返回比例、无积分时可展示)
final double bonusRatio;
factory PaymentMethodItem.fromJson(Map<String, dynamic> json) {
return PaymentMethodItem(
paymentMethod: json['resource']?.toString() ?? '',
subPaymentMethod: json['ceremony']?.toString(),
name: json['brigade']?.toString(),
icon: json['greylist']?.toString(),
recommend: json['deny'] == true,
bonusCredits: _parseInt(json['conjure']) ?? 0,
bonusRatio: _parseDouble(json['enchant']) ?? 0,
);
}
static int? _parseInt(dynamic v) {
if (v == null) return null;
if (v is int) return v;
if (v is num) return v.toInt();
return int.tryParse(v.toString());
}
static double? _parseDouble(dynamic v) {
if (v == null) return null;
if (v is double) return v;
if (v is num) return v.toDouble();
return double.tryParse(v.toString());
}
String get displayName => name?.isNotEmpty == true ? name! : paymentMethod;
/// 用于列表副标题:优先展示赠送积分,否则展示赠送比例
String? get bonusLabel {
if (bonusCredits > 0) {
return '+$bonusCredits bonus credits';
}
if (bonusRatio > 0) {
final pct = bonusRatio <= 1
? (bonusRatio * 100).round()
: bonusRatio.round();
return '+$pct% bonus credits';
}
return null;
}
}