Files
sendico/frontend/pweb/lib/providers/payment_flow_provider.dart
2025-12-05 04:34:11 +01:00

80 lines
2.0 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/recipient/recipient.dart';
import 'package:pweb/providers/page_selector.dart';
class PaymentFlowProvider extends ChangeNotifier {
PaymentType _selectedType;
PaymentMethodData? _manualPaymentData;
PaymentFlowProvider({
required PaymentType initialType,
}) : _selectedType = initialType;
PaymentType get selectedType => _selectedType;
PaymentMethodData? get manualPaymentData => _manualPaymentData;
void syncWithSelector(PageSelectorProvider selector) {
final recipient = selector.selectedRecipient;
final resolvedType = _resolveSelectedType(selector, recipient);
var hasChanges = false;
if (resolvedType != _selectedType) {
_selectedType = resolvedType;
hasChanges = true;
}
if (recipient != null && _manualPaymentData != null) {
_manualPaymentData = null;
hasChanges = true;
}
if (hasChanges) notifyListeners();
}
void reset(PageSelectorProvider selector) {
_selectedType = selector.getDefaultPaymentType();
_manualPaymentData = null;
notifyListeners();
}
void selectType(PaymentType type, {bool resetManualData = false}) {
if (_selectedType == type && (!resetManualData || _manualPaymentData == null)) {
return;
}
_selectedType = type;
if (resetManualData) {
_manualPaymentData = null;
}
notifyListeners();
}
void setManualPaymentData(PaymentMethodData? data) {
_manualPaymentData = data;
notifyListeners();
}
PaymentType _resolveSelectedType(
PageSelectorProvider selector,
Recipient? recipient,
) {
final available = selector.getAvailablePaymentTypes();
final current = _selectedType;
if (recipient == null) {
return current;
}
if (available.keys.contains(current)) {
return current;
}
return selector.getDefaultPaymentType();
}
}