CrossmintEmailSignInViewModel class final

Headless view model for the SDK's email + OTP sign-in flow. Owns the state machine (current step, loading flag, error, OTP challenge id, resend cooldown) and the authentication calls against CrossmintAuthClient, so the default-UI CrossmintEmailSignIn widget can become a thin presentational layer and headless consumers can reuse the same state machine behind their own design system.

The view model does not own text controllers — those are presentation concerns. Consumers pass the trimmed email / OTP strings into sendOtp / confirmOtp / resend and own their own input widgets.

Lifecycle: consumers must call dispose when the view model is no longer needed so the internal resend-cooldown timer is cancelled.

Inheritance

Constructors

CrossmintEmailSignInViewModel({required CrossmintAuthClient auth, Duration cooldownDuration = const Duration(seconds: 60)})

Properties

canResend bool
True when resend can be invoked: the cooldown has elapsed and no operation is currently in flight.
no setter
cooldownDuration Duration
Duration of the resend cooldown. Defaults to 60 seconds to match the React Native Crossmint SDK. Lowered in tests to keep them fast.
final
cooldownRemaining int
Seconds remaining before resend becomes available again. Zero when the cooldown is not active.
no setter
emailId String?
The OTP challenge id returned by CrossmintAuthClient.sendEmailOtp, required for the subsequent confirm call. null until sendOtp succeeds.
no setter
error String?
Localized error message from the last failed operation, or null if the flow is in a clean state.
no setter
hashCode int
The hash code for this object.
no setterinherited
hasListeners bool
Whether any listeners are currently registered.
no setterinherited
isLoading bool
True while a network call (send, confirm, or resend) is in flight.
no setter
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
step CrossmintEmailSignInStep
Current step in the sign-in flow.
no setter
submittedEmail String
The email address the user successfully submitted. Empty string until sendOtp succeeds.
no setter

Methods

addListener(VoidCallback listener) → void
Register a closure to be called when the object changes.
inherited
confirmOtp(String code) Future<bool>
Confirm the OTP challenge with code. Returns true if the verification succeeded, false if the code was rejected, and rethrows on a non-validation error (after storing the error on error and notifying listeners).
dispose() → void
Discards any resources used by the object.
override
goBackToEmail() → void
Return to the email-input step. Cancels the resend cooldown, clears any displayed error, and preserves submittedEmail / emailId in case the consumer wants to re-use them (e.g. for a "wrong email" confirmation dialog).
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
notifyListeners() → void
Call all the registered listeners.
inherited
removeListener(VoidCallback listener) → void
Remove a previously registered closure from the list of closures that are notified when the object changes.
inherited
resend() Future<void>
Re-send the OTP challenge for the previously-submitted email. No-op when the resend cooldown has not yet elapsed or when an operation is already in flight. On success the cooldown restarts; on failure the error is stored on error and the cooldown is not touched.
sendOtp(String email) Future<void>
Send an OTP challenge for email. On success, transitions to CrossmintEmailSignInStep.otpInput and starts the resend cooldown. On failure, stores the error message on error and stays on the email-input step.
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited