CrossmintWalletController class final
Stateful orchestrator for Crossmint wallets in a Flutter app.
Holds the currently-loaded CrossmintWallet, exposes lifecycle operations
(getWallet, createWallet, ensureLoaded, refresh, clear),
surfaces OTP challenges via otp, and provides create*Wallet*
convenience methods that wire a runtime wallet with a signer of your
choosing (device, non-custodial, external, passkey).
Obtain one from CrossmintClient.createWalletController and pair it with
CrossmintWalletHost (headless) or CrossmintWalletProvider
(opt-in Material UI) so the hidden signer bridge has a place to mount.
Extends ChangeNotifier — listen to the controller for wallet-state changes. Mutations go through the controller's public API; observation can additionally go through state for a narrower, read-only surface.
- Inheritance
-
- Object
- ChangeNotifier
- CrossmintWalletController
Constructors
- CrossmintWalletController({required CrossmintClient client, required CrossmintWalletControllerConfig config, CrossmintWalletStateRepository? stateRepository})
- Creates a wallet controller. Prefer CrossmintClient.createWalletController over calling this directly.
Properties
- client → CrossmintClient
-
The underlying client — exposed for code that needs direct access to
sub-clients (auth, orders, credentials, etc.).
final
- config → CrossmintWalletControllerConfig
-
The configuration this controller was built with.
final
- currentWallet → CrossmintWallet?
-
The currently-loaded wallet, or
nullif none is loaded.no setter - hashCode → int
-
The hash code for this object.
no setterinherited
- hasListeners → bool
-
Whether any listeners are currently registered.
no setterinherited
- onAuthRequired → CrossmintWalletAuthRequiredCallback
-
The auth-required callback the controller wires into every signer it
builds. Exposed so apps building signers manually can share the same
OTP-handling path.
no setter
- otp → CrossmintWalletOtpController
-
OTP controller for non-custodial email/phone signer challenges.
final
-
otpChallengeListenable
→ ValueListenable<
CrossmintOtpChallenge?> -
Shortcut to CrossmintWalletOtpController.challengeListenable.
no setter
- pendingOtpChallenge → CrossmintOtpChallenge?
-
Shortcut to CrossmintWalletOtpController.pendingChallenge.
no setter
- requireCurrentWallet → CrossmintWallet
-
Returns the currently-loaded wallet or throws
CrossmintWalletException when none is loaded.
no setter
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- state → CrossmintWalletStateView
-
Read-only observation surface for the underlying wallet state. Advanced
consumers can subscribe to wallet / status changes directly via this
Listenable while still routing all mutations through the controller's
public API (
getWallet,createWallet,refresh,clear, …).no setter - status → CrossmintWalletStatus
-
Current wallet lifecycle status.
no setter
Methods
-
addListener(
VoidCallback listener) → void -
Register a closure to be called when the object changes.
inherited
-
clear(
) → Future< void> - Drops the loaded wallet and any pending OTP challenge. Call during sign-out.
-
createEvmWallet(
{CrossmintWalletApprovalSigner? signer, List< CrossmintWalletApprovalSigner> additionalSigners = const <CrossmintWalletApprovalSigner>[], CrossmintSignerConfig? recoverySigner}) → CrossmintEvmWallet - Wraps the currently-loaded wallet as a runtime CrossmintEvmWallet. Throws CrossmintWalletException if no wallet is loaded.
-
createEvmWalletWithDeviceSigner(
{required String signerLocator, String? address, DeviceSignerKeyStorage? storage, CrossmintSignerConfig? recoverySigner}) → CrossmintEvmWallet - Builds a runtime EVM wallet backed by a hardware-backed device signer. Use for low-friction, day-to-day signing with keys in Secure Enclave / Android Keystore.
-
createEvmWalletWithExternalWalletSigner(
{required String address, String? signerLocator, required CrossmintExternalWalletSignCallback onSign, CrossmintSignerConfig? recoverySigner}) → CrossmintEvmWallet -
Builds a runtime EVM wallet backed by a user-owned external wallet
(e.g. MetaMask). The caller supplies
onSignto perform signatures. -
createEvmWalletWithNonCustodialSigner(
{required String signerType, required String signerLocator, String? address, HiddenSignerBridge? bridge, CrossmintOtpDeliveryChannel? channel, CrossmintSignerConfig? recoverySigner}) → CrossmintEvmWallet -
Builds a runtime EVM wallet backed by a non-custodial email/phone
signer. Requires CrossmintWalletHost (or
CrossmintWalletProvider) mounted in the widget tree. -
createEvmWalletWithPasskeySigner(
{String? id, required Future< CrossmintPasskeySignResult> onSign(String message), CrossmintSignerConfig? recoverySigner}) → CrossmintEvmWallet - Builds a runtime EVM wallet backed by a passkey signer.
-
createSolanaWallet(
{CrossmintWalletApprovalSigner? signer, List< CrossmintWalletApprovalSigner> additionalSigners = const <CrossmintWalletApprovalSigner>[], CrossmintSignerConfig? recoverySigner}) → CrossmintSolanaWallet - Wraps the currently-loaded wallet as a runtime CrossmintSolanaWallet. On Solana, device signer support depends on the wallet type and is validated server-side. A default device signer is not auto-injected for Solana; it is registered reactively and falls back to the recovery signer when the server rejects it.
-
createSolanaWalletWithExternalWalletSigner(
{required String address, String? signerLocator, required CrossmintExternalWalletSignCallback onSign, CrossmintSignerConfig? recoverySigner}) → CrossmintSolanaWallet - Builds a runtime Solana wallet backed by a user-owned external wallet.
-
createSolanaWalletWithNonCustodialSigner(
{required String signerType, required String signerLocator, String? address, HiddenSignerBridge? bridge, CrossmintOtpDeliveryChannel? channel, CrossmintSignerConfig? recoverySigner}) → CrossmintSolanaWallet - Builds a runtime Solana wallet backed by a non-custodial email/phone signer. Requires a mounted wallet host.
-
createSolanaWalletWithPasskeySigner(
{String? id, required Future< CrossmintPasskeySignResult> onSign(String message), CrossmintSignerConfig? recoverySigner}) → CrossmintSolanaWallet - Builds a runtime Solana wallet backed by a passkey signer. See createEvmWalletWithPasskeySigner for passkey selection semantics.
-
createStellarWallet(
{CrossmintWalletApprovalSigner? signer, List< CrossmintWalletApprovalSigner> additionalSigners = const <CrossmintWalletApprovalSigner>[], CrossmintSignerConfig? recoverySigner}) → CrossmintStellarWallet - Wraps the currently-loaded wallet as a runtime CrossmintStellarWallet.
-
createStellarWalletWithDeviceSigner(
{required String signerLocator, String? address, DeviceSignerKeyStorage? storage, CrossmintSignerConfig? recoverySigner}) → CrossmintStellarWallet - Builds a runtime Stellar wallet backed by a hardware device signer.
-
createStellarWalletWithExternalWalletSigner(
{required String address, String? signerLocator, required CrossmintExternalWalletSignCallback onSign, CrossmintSignerConfig? recoverySigner}) → CrossmintStellarWallet - Builds a runtime Stellar wallet backed by a user-owned external wallet.
-
createStellarWalletWithNonCustodialSigner(
{required String signerType, required String signerLocator, String? address, HiddenSignerBridge? bridge, CrossmintOtpDeliveryChannel? channel, CrossmintSignerConfig? recoverySigner}) → CrossmintStellarWallet - Builds a runtime Stellar wallet backed by a non-custodial email/phone signer. Requires a mounted wallet host.
-
createStellarWalletWithPasskeySigner(
{String? id, required Future< CrossmintPasskeySignResult> onSign(String message), CrossmintSignerConfig? recoverySigner}) → CrossmintStellarWallet - Builds a runtime Stellar wallet backed by a passkey signer. See createEvmWalletWithPasskeySigner for passkey selection semantics.
-
createWallet(
CrossmintWalletCreateRequest request) → Future< CrossmintWallet> - Creates a new wallet and stores it in controller state. Validates passkey signers up-front via crossmintValidatePasskeySigners and fires CrossmintWalletLifecycleCallbacks.onWalletCreationStart if set.
-
dispose(
) → void -
Discards any resources used by the object.
override
-
ensureLoaded(
) → Future< CrossmintWallet?> - Ensures a wallet is loaded, creating one if configured to do so.
-
getWallet(
CrossmintWalletLookupRequest request) → Future< CrossmintWallet?> -
Looks up an existing wallet and stores the result in controller state.
Returns
nullwhen no wallet matches. Listeners fire on state changes. -
loadWallet(
CrossmintWalletLookupRequest request) → Future< CrossmintWallet?> - Deprecated: use getWallet instead.
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
notifyListeners(
) → void -
Call all the registered listeners.
inherited
-
refresh(
) → Future< CrossmintWallet?> -
Re-fetches the currently-loaded wallet from the API. Returns
nullwhen nothing is loaded. -
rejectOtp(
[Object? error]) → void - Shortcut to CrossmintWalletOtpController.reject.
-
removeListener(
VoidCallback listener) → void -
Remove a previously registered closure from the list of closures that are
notified when the object changes.
inherited
-
sendOtp(
) → Future< void> - Shortcut to CrossmintWalletOtpController.sendOtp.
-
toString(
) → String -
A string representation of this object.
inherited
-
verifyOtp(
String otpCode) → Future< void> - Shortcut to CrossmintWalletOtpController.verifyOtp.
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited