determineNextStep method
Implementation
VerificationStep determineNextStep(PreflightResponse response) {
if (response.screen.show == AppScreen.completedScreen ||
response.screen.show == AppScreen.successfulScreen) {
if (_showCompletionView) {
return const VerificationStep.completed();
} else {
WidgetsBinding.instance.addPostFrameCallback((_) {
completeFlow();
});
return const VerificationStep.processing();
}
}
if (response.entityIdState != null) {
if (response.entityIdState == IdDocumentState.frontReceivedButNeedsResubmission ||
response.entityIdState == IdDocumentState.frontReceivedAndBackReceivedButBackNeedsResubmission) {
final errorStep = VerificationStep.documentError(
state: response.entityIdState!,
type: response.entityIdDocumentType ?? IdDocumentType.idCard,
);
return errorStep;
}
}
String? poaRejectionMessage;
String? pofRejectionMessage;
if (response.proofOfAddress?.status == "rejected") {
poaRejectionMessage = response.proofOfAddress?.message;
}
if (response.proofOfFunds?.status == "rejected") {
pofRejectionMessage = response.proofOfFunds?.message;
}
if (response.requirement != null) {
switch (response.requirement!.requirementType) {
case "identity_document":
if (response.entityIdState != null) {
if (response.entityIdState != IdDocumentState.frontReceivedButNeedsResubmission &&
response.entityIdState != IdDocumentState.frontReceivedAndBackReceivedButBackNeedsResubmission) {
if (response.entityIdState == IdDocumentState.frontReceivedAwaitingBack) {
return const VerificationStep.documentCapture(side: DocumentSide.back);
} else {
return const VerificationStep.documentCapture(side: DocumentSide.front);
}
}
} else {
return const VerificationStep.documentCapture(side: DocumentSide.front);
}
break;
case "liveness":
return const VerificationStep.livenessCheck();
case "phone_verification":
return const VerificationStep.phoneVerification();
case "email_verification":
return const VerificationStep.emailVerification();
case "proof_of_address":
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfAddress,
rejectionMessage: poaRejectionMessage,
);
case "proof_of_funds":
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfFunds,
rejectionMessage: pofRejectionMessage,
);
}
}
if (response.entityIdState != null) {
switch (response.entityIdState) {
case IdDocumentState.frontReceivedAwaitingBack:
return const VerificationStep.documentCapture(side: DocumentSide.back);
case IdDocumentState.awaitingNfc:
case IdDocumentState.noneReceived:
return const VerificationStep.documentCapture(side: DocumentSide.front);
case IdDocumentState.idReceivedAwaitingLiveness:
case IdDocumentState.awaitingLiveness:
return const VerificationStep.livenessCheck();
case IdDocumentState.awaitingPoa:
case IdDocumentState.awaitingA4Document:
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfAddress,
rejectionMessage: poaRejectionMessage,
);
case IdDocumentState.awaitingPof:
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfFunds,
rejectionMessage: pofRejectionMessage,
);
case IdDocumentState.completed:
if (_showCompletionView) {
return const VerificationStep.completed();
} else {
WidgetsBinding.instance.addPostFrameCallback((_) {
completeFlow();
});
return const VerificationStep.processing();
}
default:
break;
}
}
switch (response.screen.show) {
case AppScreen.scanIdDocumentFrontScreen:
return const VerificationStep.documentCapture(side: DocumentSide.front);
case AppScreen.scanIdDocumentBackScreen:
return const VerificationStep.documentCapture(side: DocumentSide.back);
case AppScreen.nfcCaptureScreen:
return const VerificationStep.documentCapture(side: DocumentSide.front);
case AppScreen.scanA4DocumentScreen:
if (response.entityIdState == IdDocumentState.awaitingPof) {
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfFunds,
rejectionMessage: pofRejectionMessage,
);
} else {
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfAddress,
rejectionMessage: poaRejectionMessage,
);
}
case AppScreen.proofOfAddressScreen:
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfAddress,
rejectionMessage: poaRejectionMessage,
);
case AppScreen.proofOfFundsScreen:
return VerificationStep.documentUpload(
type: DocumentVerificationType.proofOfFunds,
rejectionMessage: pofRejectionMessage,
);
case AppScreen.livenessScreen:
return const VerificationStep.livenessCheck();
case AppScreen.completedScreen:
case AppScreen.successfulScreen:
if (_showCompletionView) {
return const VerificationStep.completed();
} else {
WidgetsBinding.instance.addPostFrameCallback((_) {
completeFlow();
});
return const VerificationStep.processing();
}
case AppScreen.waitingForPreviousCallToComplete:
return const VerificationStep.processing();
case AppScreen.consentScreen:
return const VerificationStep.consent();
case AppScreen.cancelScreen:
case AppScreen.rejectedScreen:
if (_context != null) {
showErrorMessage(ApiErrorStrings(_context!).verificationRejectedOrCanceled);
} else {
showErrorMessage(ApiErrorStrings(_context!).verificationRejectedOrCanceled);
}
_onCancelledCallback?.call();
return const VerificationStep.completed();
case AppScreen.phoneVerificationStartScreen:
case AppScreen.phoneVerificationConfirmScreen:
case AppScreen.phoneVerificationScreen:
return const VerificationStep.phoneVerification();
case AppScreen.emailVerificationStartScreen:
case AppScreen.emailVerificationConfirmScreen:
case AppScreen.emailVerificationScreen:
return const VerificationStep.emailVerification();
}
}