signAndSubmitTransaction method
Signs the given transaction and submits it to the callback url if available, otherwise it submits it to the stellar network.
Implementation
Future<SubmitUriSchemeTransactionResponse> signAndSubmitTransaction(
String url, KeyPair signerKeyPair,
{Network? network}) async {
Network net = Network.PUBLIC;
if (network != null) {
net = network;
}
final XdrTransactionEnvelope envelope = _getXdrTransactionEnvelope(url);
AbstractTransaction absTransaction =
AbstractTransaction.fromEnvelopeXdr(envelope);
absTransaction.sign(signerKeyPair, net);
final String? callback = getParameterValue(callbackParameterName, url);
if (callback != null && callback.startsWith("url:")) {
final Uri serverURI = Uri.parse(callback.substring(4));
Map<String, String> headers = {...RequestBuilder.headers};
headers.putIfAbsent(
"Content-Type", () => "application/x-www-form-urlencoded");
String bodyStr = xdrParameterName +
"=" +
Uri.encodeComponent(absTransaction.toEnvelopeXdrBase64());
SubmitUriSchemeTransactionResponse result = await httpClient
.post(serverURI, body: bodyStr, headers: headers)
.then((response) {
return SubmitUriSchemeTransactionResponse(null, response);
}).catchError((onError) {
throw onError;
});
return result;
} else {
StellarSDK sdk =
net == Network.PUBLIC ? StellarSDK.PUBLIC : StellarSDK.TESTNET;
if (absTransaction is Transaction) {
SubmitTransactionResponse submitTransactionResponse =
await sdk.submitTransaction(absTransaction);
return SubmitUriSchemeTransactionResponse(
submitTransactionResponse, null);
} else if (absTransaction is FeeBumpTransaction) {
SubmitTransactionResponse submitTransactionResponse =
await sdk.submitFeeBumpTransaction(absTransaction);
return SubmitUriSchemeTransactionResponse(
submitTransactionResponse, null);
} else {
throw ArgumentError("Unsupported transaction type");
}
}
}