checkout method

Future<void> checkout(
  1. BuildContext context, {
  2. required CheckoutData data,
  3. dynamic onSuccess(
    1. CheckoutValues data
    )?,
  4. dynamic onError(
    1. Object error
    )?,
})

Implementation

Future<void> checkout(BuildContext context,
    {required final CheckoutData data,
    Function(CheckoutValues data)? onSuccess,
    Function(Object error)? onError}) async {
  CheckoutState.init(onError: onError, onSuccess: onSuccess);

  try {
    await _saveCredentials();

    final CheckoutService checkoutService = CheckoutService(token.toString());
    final CheckoutRepository checkoutRepository =
        CheckoutRepository(checkoutService);
    _createCheckoutUseCase = CreateCheckoutUseCase(checkoutRepository);

    final parsedData = _parse(data);
    final checkoutResult =
        await _createCheckoutUseCase.createCheckout(parsedData);

    Loggers.log('Checkout Create Result', jsonEncode(checkoutResult));

    String? checkoutId = checkoutResult['id'];
    String phoneNumber = checkoutResult['shopper']['phone'];
    String? merchantId = checkoutResult['merchant_id'];

    CheckoutState().checkoutValues!.edit(
        checkoutId: checkoutId, merchantId: merchantId, phone: phoneNumber);

    if (phoneNumber != '') {
      //Se phone validado, chama mutation initialPhoneAuth, e ir para simpleOTP
      final result = await initiatePhoneAuth(
        context: context,
        checkoutId: checkoutId,
        forceOtp: true,
        phone: phoneNumber,
        sendBySms: true,
        sendByWhatsapp: false,
      );

      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => OtpPages(
            errorMessage: result?['error'],
            metadata: result?['metadata'],
          ),
        ),
      );
    } else if (phoneNumber == '') {
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(
          builder: (context) => const AddPhoneNumberPage(),
        ),
      );
    } else if (merchantId == null || checkoutId == null) {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => const DeclinedMessagePage()),
      );
    } else {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => const DeclinedMessagePage()),
      );
    }
  } catch (e) {
    print("Failed to create checkout $e");
    Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => const GenericErrorPage()),
    );
  }
}