fetchQrCodeDetails static method

Future<ClientResponse<QrResponseData>> fetchQrCodeDetails({
  1. required String publicKey,
  2. required String processId,
  3. required String assetId,
  4. required String networkId,
})

Implementation

static Future<ClientResponse<QrResponseData>> fetchQrCodeDetails({
  required String publicKey,
  required String processId,
  required String assetId,
  required String networkId,
}) async {
  try {
    final response = await http.post(
      Uri.parse('$apiURL/payment-button/process/confirm'),
      headers: getHeaders(publicKey),
      body: jsonEncode({
        'processId': processId,
        'assetId': assetId,
        'networkId': networkId,
      }),
    );
    final data = jsonDecode(response.body);

    if (data['result'] == null) {
      throw ClientError(
        code: ClientCode.paymentProcessNotAvailable,
        message: I18n.t.errors.paymentProcessNotAvailable,
      );
    }

    final Map<String, dynamic> result =
        Map<String, dynamic>.from(data['result']);
    final wallet = result['wallet'];
    final networkName = result['network'];

    final String address = networkName == "apolopay"
        ? "$appURL/payment-process/$processId"
        : wallet;

    return ClientResponse.fromJson(
      data,
      result: (val) {
        final Map<String, dynamic> map = Map<String, dynamic>.from(val);
        return QrResponseData.fromJson({
          ...map,
          'address': address,
          'qrCodeUrl':
              'https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=$address&ecc=H',
          'paymentUrl': address.startsWith('http') ? address : null,
        });
      },
    );
  } catch (error) {
    throw ClientError.fromError(
      error,
      code: ClientCode.qrFetchError,
      message: I18n.t.errors.qrFetchError,
    );
  }
}