withdraw method Null safety
- SEP24WithdrawRequest request
This operation allows a user to redeem an asset currently on the Stellar network for the real asset (BTC, USD, stock, etc...) via the anchor of the Stellar asset. The withdraw endpoint allows a wallet to get withdrawal information from an anchor, so a user has all the information needed to initiate a withdrawal. It also lets the anchor specify the url for the interactive webapp to continue with the anchor's side of the withdraw.
Throws a RequestErrorException if the server responds with an error and corresponding error message. Throws a SEP24AuthenticationRequiredException if the server responds with an authentication_required error.
Implementation
Future<SEP24InteractiveResponse> withdraw(
SEP24WithdrawRequest request) async {
Uri serverURI = Util.appendEndpointToUrl(
_transferServiceAddress, 'transactions/withdraw/interactive');
_PostRequestBuilder requestBuilder =
_PostRequestBuilder(httpClient, serverURI);
final Map<String, String> fields = {"asset_code": request.assetCode};
final Map<String, Uint8List> files = {};
if (request.assetIssuer != null) {
fields["asset_issuer"] = request.assetIssuer!;
}
if (request.amount != null) {
fields["amount"] = request.amount!;
}
if (request.account != null) {
fields["account"] = request.account!;
}
if (request.memo != null) {
fields["memo"] = request.memo!;
}
if (request.memoType != null) {
fields["memo_type"] = request.memoType!;
}
if (request.walletName != null) {
fields["wallet_name"] = request.walletName!;
}
if (request.walletUrl != null) {
fields["wallet_url"] = request.walletUrl!;
}
if (request.lang != null) {
fields["lang"] = request.lang!;
}
if (request.refundMemo != null) {
fields["refund_memo"] = request.refundMemo!;
}
if (request.refundMemoType != null) {
fields["refund_memo_type"] = request.refundMemoType!;
}
if (request.kycFields != null &&
request.kycFields?.naturalPersonKYCFields != null) {
fields.addAll(request.kycFields!.naturalPersonKYCFields!.fields());
}
if (request.kycFields != null &&
request.kycFields?.organizationKYCFields != null) {
fields.addAll(request.kycFields!.organizationKYCFields!.fields()!);
}
if (request.customFields != null) {
fields.addAll(request.customFields!);
}
// files always at the end.
if (request.kycFields != null &&
request.kycFields?.naturalPersonKYCFields != null) {
files.addAll(request.kycFields!.naturalPersonKYCFields!.files());
}
if (request.kycFields != null &&
request.kycFields?.organizationKYCFields != null) {
files.addAll(request.kycFields!.organizationKYCFields!.files());
}
if (request.customFiles != null) {
files.addAll(request.customFiles!);
}
SEP24InteractiveResponse response;
try {
response = await requestBuilder
.forFields(fields)
.forFiles(files)
.execute(request.jwt);
} on ErrorResponse catch (e) {
if (e.code == 403) {
_handleForbiddenResponse(e);
} else if (e.code != 200) {
_handleErrorResponse(e);
}
throw e;
}
return response;
}