> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crossmint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CrossmintWalletControllerConfig

> Flutter Final Class

**Final Class**

Configuration for `CrossmintWalletController`.

```dart theme={null}
final class CrossmintWalletControllerConfig
```

Pass `createOnLogin` to have the controller create (or load) a wallet
automatically when a session becomes available. Set `showOtpSignerPrompt`
to `false` if you want to drive OTP prompts entirely from your own UI
(the controller still exposes the OTP controller via
`CrossmintWalletController.otp`).

## Constructors

### CrossmintWalletControllerConfig

```dart theme={null}
const CrossmintWalletControllerConfig({
  this.createOnLogin,
  this.showOtpSignerPrompt = true,
  this.callbacks,
  this.deviceSignerKeyStorage,
})
```

Creates a controller config. All fields are optional.

## Properties

### createOnLogin

```dart theme={null}
final CrossmintCreateOnLoginConfig? createOnLogin
```

When set, the controller automatically creates (or loads) a wallet on the given chain once the user is authenticated. Fill `recovery` with the recovery signer config (e.g. `CrossmintEmailSignerConfig()`).

### showOtpSignerPrompt

```dart theme={null}
final bool showOtpSignerPrompt
```

Whether the SDK should surface the default OTP prompt automatically. Set to `false` to drive OTP UI yourself by listening to `CrossmintWalletController.otp`.

### callbacks

```dart theme={null}
final CrossmintWalletLifecycleCallbacks? callbacks
```

Optional lifecycle hooks — see `CrossmintWalletLifecycleCallbacks`.

### deviceSignerKeyStorage

```dart theme={null}
final DeviceSignerKeyStorage? deviceSignerKeyStorage
```

Storage adapter used to persist device-signer keys. Defaults to a secure-enclave / keystore-backed implementation on device.
