staking_order_item.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. class StakingOrderItem {
  2. final int id;
  3. final String coinUnit;
  4. final String amount;
  5. final String releasedAmount;
  6. final int status;
  7. final String? stakingTime;
  8. final String? unlockTime;
  9. final String? lastReleaseTime;
  10. final String? createTime;
  11. const StakingOrderItem({
  12. required this.id,
  13. required this.coinUnit,
  14. required this.amount,
  15. required this.releasedAmount,
  16. required this.status,
  17. this.stakingTime,
  18. this.unlockTime,
  19. this.lastReleaseTime,
  20. this.createTime,
  21. });
  22. factory StakingOrderItem.fromJson(Map<String, dynamic> json) {
  23. return StakingOrderItem(
  24. id: int.tryParse('${json['id'] ?? 0}') ?? 0,
  25. coinUnit: '${json['coinUnit'] ?? ''}'.toUpperCase(),
  26. amount: '${json['amount'] ?? '0'}',
  27. releasedAmount: '${json['releasedAmount'] ?? '0'}',
  28. status: int.tryParse('${json['status'] ?? 0}') ?? 0,
  29. stakingTime: json['stakingTime']?.toString(),
  30. unlockTime: json['unlockTime']?.toString(),
  31. lastReleaseTime: json['lastReleaseTime']?.toString(),
  32. createTime: json['createTime']?.toString(),
  33. );
  34. }
  35. /// 待释放 = 锁仓总量 - 已释放
  36. double get pendingAmount {
  37. final total = double.tryParse(amount) ?? 0;
  38. final released = double.tryParse(releasedAmount) ?? 0;
  39. final pending = total - released;
  40. if (!pending.isFinite || pending <= 0) {
  41. return 0;
  42. }
  43. return pending;
  44. }
  45. String get displayStartTime {
  46. final raw = stakingTime ?? createTime;
  47. if (raw == null || raw.isEmpty) {
  48. return '-';
  49. }
  50. return raw.replaceFirst('T', ' ').substring(0, raw.length >= 19 ? 19 : raw.length);
  51. }
  52. }
  53. class StakingOrderPage {
  54. final List<StakingOrderItem> content;
  55. final int totalPages;
  56. final int pageNo;
  57. const StakingOrderPage({
  58. required this.content,
  59. required this.totalPages,
  60. required this.pageNo,
  61. });
  62. }
  63. /// 锁仓订单状态筛选(对齐 Web StakingOrderStatusFilter)
  64. enum StakingOrderStatusFilter {
  65. all,
  66. subscribing,
  67. releasing,
  68. completed,
  69. }
  70. extension StakingOrderStatusFilterX on StakingOrderStatusFilter {
  71. String? get apiStatus => switch (this) {
  72. StakingOrderStatusFilter.all => null,
  73. StakingOrderStatusFilter.subscribing => '0',
  74. StakingOrderStatusFilter.releasing => '1',
  75. StakingOrderStatusFilter.completed => '2',
  76. };
  77. }