import 'package:equatable/equatable.dart';
import 'package:payment_plugin/domain/models/stored_payment_method.dart';
class PaymentCardsState extends Equatable {
final bool isLoading;
final bool hasError;
final Iterable<StoredPaymentMethod> cards;
final StoredPaymentMethod? selectedPaymentMethod;
final bool missingPaymentMethod;
const PaymentCardsState._({
required this.cards,
required this.isLoading,
required this.hasError,
this.selectedPaymentMethod,
this.missingPaymentMethod = false,
});
PaymentCardsState.initial()
: cards = [],
isLoading = true,
hasError = false,
selectedPaymentMethod = null,
missingPaymentMethod = false;
PaymentCardsState cardsFetched(Iterable<StoredPaymentMethod> cards) {
return _copyWith(cards: cards, isLoading: false);
}
PaymentCardsState cardsFetchedEmpty() {
return _copyWith(cards: [], isLoading: false, hasCards: false);
}
PaymentCardsState cardsFetchedError() =>
_copyWith(isLoading: false, hasError: true);
PaymentCardsState loading(bool isLoading) {
return _copyWith(isLoading: isLoading);
}
PaymentCardsState _copyWith({
Iterable<StoredPaymentMethod>? cards,
bool? isLoading,
bool? hasError,
bool? hasCards,
StoredPaymentMethod? selectedPaymentMethod,
bool? missingPaymentMethod,
}) {
return PaymentCardsState._(
cards: cards ?? this.cards,
isLoading: isLoading ?? this.isLoading,
hasError: hasError ?? this.hasError,
selectedPaymentMethod: selectedPaymentMethod ?? this.selectedPaymentMethod,
missingPaymentMethod: missingPaymentMethod ?? this.missingPaymentMethod,
);
}
PaymentCardsState paymentMethodSelected(StoredPaymentMethod? paymentMethod) {
return _copyWith(selectedPaymentMethod: paymentMethod);
}
PaymentCardsState clearSelectedPaymentMethod() {
return _copyWith(selectedPaymentMethod: null);
}
PaymentCardsState setMissingPaymentMethod(bool value) {
return _copyWith(missingPaymentMethod: value);
}
@override
List<Object?> get props => [isLoading, hasError, cards, selectedPaymentMethod, missingPaymentMethod];
}