WalletBloc constructor

WalletBloc()

Implementation

WalletBloc() : super(const WalletState()) {
  on<CheckCode>((event, emit) async {
    final res = await paymentRepository.checkCode(
        context: event.context, code: event.code);
    res.fold((l) {
      event.onSuccess.call();
      Navigator.pop(event.context);
    }, (r) {
      emit(state.copyWith(isLoading: false));
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });

  on<GetWallets>((event, emit) async {
    emit(state.copyWith(list: [], isLoading: true));
    final res = await paymentRepository.fetchCards(context: event.context);
    res.fold((list) async {
      emit(state.copyWith(isLoading: false, list: list));
    }, (r) {
      emit(state.copyWith(isLoading: false));
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });

  on<CreateCard>((event, emit) async {
    emit(state.copyWith(isButtonLoading: true));
    final res = await paymentRepository.crateCard(
        context: event.context,
        number: event.number,
        date: event.expiredDate);
    res.fold((l) async {
      event.onSuccess.call();
      emit(state.copyWith(isButtonLoading: false));
    }, (r) {
      emit(state.copyWith(isButtonLoading: false));
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });

  on<DeleteCard>((event, emit) async {
    final res = await paymentRepository.deleteCard(
      context: event.context,
      cardId: event.cardId,
    );
    res.fold((l) {
      List<CardModel> list = List.from(state.list);

      for (int i = 0; i < list.length; i++) {
        if (event.cardId == list[i].id) {
          list.removeAt(i);
          break;
        }
      }
      emit(state.copyWith(list: list));
    }, (r) {
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });

  on<TopUp>((event, emit) async {
    emit(state.copyWith(isButtonLoading: true));
    final res = await paymentRepository.topUp(
        context: event.context, cartId: event.cardId, amount: event.amount);
    res.fold((l) {
      event.onSuccess.call();
      Navigator.pop(event.context);
      emit(state.copyWith(isButtonLoading: false));
    }, (r) {
      emit(state.copyWith(isButtonLoading: false));
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });

  on<Withdraw>((event, emit) async {
    emit(state.copyWith(isButtonLoading: true));
    final res = await paymentRepository.withdraw(
        context: event.context, cartId: event.cardId, amount: event.amount);
    res.fold((l) {
      event.onSuccess.call();
      Navigator.pop(event.context);
      emit(state.copyWith(isButtonLoading: false));
    }, (r) {
      emit(state.copyWith(isButtonLoading: false));
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });

  on<SelectIndex>((event, emit) {
    emit(state.copyWith(selectIndex: event.index));
  });

  on<GetTransaction>((event, emit) async {
    if (event.isRefresh ?? false) {
      event.controller?.resetNoData();
      emit(state.copyWith(listTransactions: []));
    }
    final res = await paymentRepository.fetchTransactions(
        context: event.context, skip: state.listTransactions.length);
    res.fold((l) async {
      final List<TransactionModel> list = List.from(state.listTransactions);
      list.addAll(l);
      emit(state.copyWith(listTransactions: list));
      if (event.isRefresh ?? false) {
        event.controller?.refreshCompleted();
        return;
      } else if (l.isEmpty) {
        event.controller?.loadNoData();
        return;
      }
      event.controller?.loadComplete();
    }, (r) {
      if (event.isRefresh ?? false) {
        event.controller?.refreshFailed();
      }
      event.controller?.loadFailed();
      AppHelper.errorSnackBar(
        context: event.context,
        message: r,
      );
    });
  });
}