hotfix for payment page to see more then one payment type
This commit is contained in:
@@ -15,6 +15,7 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
PaymentMethodData? _manualPaymentData;
|
||||
List<PaymentMethod> _recipientMethods = [];
|
||||
Recipient? _recipient;
|
||||
String? _selectedMethodId;
|
||||
|
||||
PaymentFlowProvider({
|
||||
required PaymentType initialType,
|
||||
@@ -25,9 +26,14 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
PaymentType get selectedType => _selectedType;
|
||||
PaymentMethodData? get manualPaymentData => _manualPaymentData;
|
||||
Recipient? get recipient => _recipient;
|
||||
PaymentMethod? get selectedMethod => hasRecipient
|
||||
? _recipientMethods.firstWhereOrNull((method) => method.type == _selectedType)
|
||||
: null;
|
||||
PaymentMethod? get selectedMethod {
|
||||
if (!hasRecipient) return null;
|
||||
if (_selectedMethodId != null) {
|
||||
final byId = _recipientMethods.firstWhereOrNull((method) => method.id == _selectedMethodId);
|
||||
if (byId != null) return byId;
|
||||
}
|
||||
return _preferredMethodForType(_selectedType, _recipientMethods);
|
||||
}
|
||||
|
||||
bool get hasRecipient => _recipient != null;
|
||||
|
||||
@@ -42,6 +48,12 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
? List<PaymentMethod>.unmodifiable(_recipientMethods)
|
||||
: const [];
|
||||
|
||||
List<PaymentMethod> get methodsForSelectedType => hasRecipient
|
||||
? List<PaymentMethod>.unmodifiable(
|
||||
_recipientMethods.where((method) => method.type == _selectedType).toList(),
|
||||
)
|
||||
: const [];
|
||||
|
||||
void update(
|
||||
RecipientsProvider recipientsProvider,
|
||||
PaymentMethodsProvider methodsProvider,
|
||||
@@ -63,12 +75,25 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
_selectedType = type;
|
||||
if (hasRecipient) {
|
||||
_selectedMethodId = _preferredMethodForType(type, _recipientMethods)?.id;
|
||||
}
|
||||
if (resetManualData) {
|
||||
_manualPaymentData = null;
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void selectMethod(PaymentMethod method) {
|
||||
if (!hasRecipient) return;
|
||||
if (_selectedMethodId == method.id && _selectedType == method.type) return;
|
||||
_selectedMethodId = method.id;
|
||||
if (_selectedType != method.type) {
|
||||
_selectedType = method.type;
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setManualPaymentData(PaymentMethodData? data) {
|
||||
_manualPaymentData = data;
|
||||
notifyListeners();
|
||||
@@ -124,6 +149,12 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
availableTypes: availableTypes,
|
||||
preferredType: preferredType,
|
||||
);
|
||||
final resolvedMethod = _resolveSelectedMethod(
|
||||
recipient: recipient,
|
||||
methods: methods,
|
||||
selectedType: resolvedType,
|
||||
selectedMethodId: _selectedMethodId,
|
||||
);
|
||||
|
||||
var hasChanges = false;
|
||||
|
||||
@@ -142,6 +173,11 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
hasChanges = true;
|
||||
}
|
||||
|
||||
if ((resolvedMethod?.id ?? _selectedMethodId) != _selectedMethodId) {
|
||||
_selectedMethodId = resolvedMethod?.id;
|
||||
hasChanges = true;
|
||||
}
|
||||
|
||||
if ((recipient != null || forceResetManualData) && _manualPaymentData != null) {
|
||||
_manualPaymentData = null;
|
||||
hasChanges = true;
|
||||
@@ -154,6 +190,28 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
for (final method in methods) method.type: method.data,
|
||||
};
|
||||
|
||||
PaymentMethod? _preferredMethodForType(PaymentType type, List<PaymentMethod> methods) {
|
||||
final forType = methods.where((method) => method.type == type).toList();
|
||||
if (forType.isEmpty) return null;
|
||||
return forType.firstWhereOrNull((method) => method.isMain) ?? forType.first;
|
||||
}
|
||||
|
||||
PaymentMethod? _resolveSelectedMethod({
|
||||
required Recipient? recipient,
|
||||
required List<PaymentMethod> methods,
|
||||
required PaymentType selectedType,
|
||||
required String? selectedMethodId,
|
||||
}) {
|
||||
if (recipient == null) return null;
|
||||
final forType = methods.where((method) => method.type == selectedType).toList();
|
||||
if (forType.isEmpty) return null;
|
||||
if (selectedMethodId != null) {
|
||||
final byId = forType.firstWhereOrNull((method) => method.id == selectedMethodId);
|
||||
if (byId != null) return byId;
|
||||
}
|
||||
return _preferredMethodForType(selectedType, methods);
|
||||
}
|
||||
|
||||
bool _hasSameMethods(List<PaymentMethod> methods) {
|
||||
if (_recipientMethods.length != methods.length) return false;
|
||||
for (var i = 0; i < methods.length; i++) {
|
||||
|
||||
Reference in New Issue
Block a user