forked from SatoshiPortal/bullbitcoin-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwallet_transaction.dart
More file actions
80 lines (69 loc) · 2.47 KB
/
Copy pathwallet_transaction.dart
File metadata and controls
80 lines (69 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import 'package:bb_mobile/core/utils/build_context_x.dart';
import 'package:bb_mobile/core/wallet/domain/entities/transaction_input.dart';
import 'package:bb_mobile/core/wallet/domain/entities/transaction_output.dart';
import 'package:bb_mobile/core/wallet/domain/entities/wallet.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'wallet_transaction.freezed.dart';
enum WalletTransactionDirection { incoming, outgoing }
enum WalletTransactionStatus {
pending,
confirmed;
String displayName(BuildContext context) {
switch (this) {
case WalletTransactionStatus.pending:
return context.loc.coreWalletTransactionStatusPending;
case WalletTransactionStatus.confirmed:
return context.loc.coreWalletTransactionStatusConfirmed;
}
}
}
@freezed
sealed class WalletTransaction with _$WalletTransaction {
const factory WalletTransaction({
required String walletId,
required Network network,
required WalletTransactionDirection direction,
required WalletTransactionStatus status,
required String txId,
required int amountSat,
required int feeSat,
required int vsize,
required List<TransactionInput> inputs,
required List<TransactionOutput> outputs,
required bool isRbf,
DateTime? confirmationTime,
@Default(false) bool isToSelf,
@Default([]) List<String> labels,
String? unblindedUrl,
}) = _WalletTransaction;
const WalletTransaction._();
bool get isBitcoin => network.isBitcoin;
bool get isLiquid => network.isLiquid;
bool get isTestnet => network.isTestnet;
bool get isMainnet => network.isMainnet;
bool get isIncoming => direction == WalletTransactionDirection.incoming;
bool get isOutgoing => direction == WalletTransactionDirection.outgoing;
bool get isPending => status == WalletTransactionStatus.pending;
bool get isConfirmed => status == WalletTransactionStatus.confirmed;
TransactionOutput? get destinationOutput {
if (outputs.isEmpty) {
return null;
}
if (isToSelf) {
return outputs.first;
} else if (direction == WalletTransactionDirection.incoming) {
return outputs.firstWhere((output) => output.isOwn);
} else {
return outputs.firstWhere((output) => !output.isOwn);
}
}
String? get toAddress {
final output = destinationOutput?.address;
return output;
}
List<String>? get toAddressLabels {
final output = destinationOutput;
return output?.addressLabels;
}
}