111 lines
2.6 KiB
Dart
111 lines
2.6 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';
|
|
|
|
|
|
class PaymentFlowProvider extends ChangeNotifier {
|
|
PaymentType _selectedType;
|
|
PaymentMethodData? _manualPaymentData;
|
|
|
|
PaymentFlowProvider({
|
|
required PaymentType initialType,
|
|
}) : _selectedType = initialType;
|
|
|
|
PaymentType get selectedType => _selectedType;
|
|
PaymentMethodData? get manualPaymentData => _manualPaymentData;
|
|
|
|
void sync({
|
|
required Recipient? recipient,
|
|
required MethodMap availableTypes,
|
|
PaymentType? preferredType,
|
|
}) {
|
|
final resolvedType = _resolveSelectedType(
|
|
recipient: recipient,
|
|
availableTypes: availableTypes,
|
|
preferredType: preferredType,
|
|
);
|
|
|
|
var hasChanges = false;
|
|
if (resolvedType != _selectedType) {
|
|
_selectedType = resolvedType;
|
|
hasChanges = true;
|
|
}
|
|
|
|
if (recipient != null && _manualPaymentData != null) {
|
|
_manualPaymentData = null;
|
|
hasChanges = true;
|
|
}
|
|
|
|
if (hasChanges) notifyListeners();
|
|
}
|
|
|
|
void reset({
|
|
required Recipient? recipient,
|
|
required MethodMap availableTypes,
|
|
PaymentType? preferredType,
|
|
}) {
|
|
final resolvedType = _resolveSelectedType(
|
|
recipient: recipient,
|
|
availableTypes: availableTypes,
|
|
preferredType: preferredType,
|
|
);
|
|
|
|
var hasChanges = false;
|
|
|
|
if (resolvedType != _selectedType) {
|
|
_selectedType = resolvedType;
|
|
hasChanges = true;
|
|
}
|
|
|
|
if (_manualPaymentData != null) {
|
|
_manualPaymentData = null;
|
|
hasChanges = true;
|
|
}
|
|
|
|
if (hasChanges) 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({
|
|
required Recipient? recipient,
|
|
required MethodMap availableTypes,
|
|
PaymentType? preferredType,
|
|
}) {
|
|
if (recipient == null) {
|
|
return preferredType ?? _selectedType;
|
|
}
|
|
|
|
if (availableTypes.isEmpty) {
|
|
return preferredType ?? PaymentType.bankAccount;
|
|
}
|
|
|
|
if (availableTypes.keys.contains(_selectedType)) {
|
|
return _selectedType;
|
|
}
|
|
|
|
if (preferredType != null && availableTypes.keys.contains(preferredType)) {
|
|
return preferredType;
|
|
}
|
|
|
|
return availableTypes.keys.first;
|
|
}
|
|
}
|