submitTransaction static method
- String transactionToken,
- DiditTransactionPayload transaction, {
- DiditTransactionOptions options = const DiditTransactionOptions(),
Submit a transaction directly from the device.
Requires a transaction SDK token minted by your backend via
POST /v3/transactions/sdk-token/. Device intelligence is attached
automatically. If the response requires a wallet-ownership widget and
DiditTransactionOptions.autoLaunchAction is not disabled, the SDK
launches it natively and later invokes
DiditTransactionOptions.onTransactionUpdated with the refreshed
transaction. A verification_session action is never auto-launched —
it is returned on DiditTransactionResult.actionRequired for the host
app to launch with its own Didit verification integration.
Throws a DiditTransactionException with DiditTransactionException.code
set to invalid_token, expired_token, validation (see
DiditTransactionException.fieldErrors), or network.
Example:
final result = await DiditSdk.submitTransaction(
sdkToken,
DiditTransactionPayload(
txnId: 'order-123',
type: 'crypto',
info: DiditTransactionInfo(
direction: 'outbound',
amount: 0.25,
currency: 'ETH',
),
travelRule: DiditTravelRule(required: true),
),
options: DiditTransactionOptions(
onTransactionUpdated: (updated) => print(updated.status),
),
);
print('${result.transactionId} ${result.actionRequired?.type}');
Implementation
static Future<DiditTransactionResult> submitTransaction(
String transactionToken,
DiditTransactionPayload transaction, {
DiditTransactionOptions options = const DiditTransactionOptions(),
}) async {
final callId =
'txn-${DateTime.now().millisecondsSinceEpoch}-${++_transactionCallCounter}';
final onTransactionUpdated = options.onTransactionUpdated;
if (options.autoLaunchAction && onTransactionUpdated != null) {
_ensureTransactionUpdateHandler();
_pendingTransactionUpdates[callId] = onTransactionUpdated;
}
try {
final raw = await SdkFlutterPlatform.instance.submitTransaction(
transactionToken,
transaction.toMap(),
{
'callId': callId,
'autoLaunchAction': options.autoLaunchAction,
if (options.baseUrl != null) 'baseUrl': options.baseUrl,
},
);
final result = DiditTransactionResult.fromMap(raw);
if (result.actionRequired == null) {
_pendingTransactionUpdates.remove(callId);
}
return result;
} on PlatformException catch (e) {
_pendingTransactionUpdates.remove(callId);
throw DiditTransactionException.fromPlatformException(e);
}
}