> ## 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.

# CrossmintExternalWalletSigner

> Flutter Abstract Base Class

**Abstract Base Class**

Base class for external-wallet delegated signers — wallets the user owns (e.g. MetaMask, Rainbow, Phantom) where the SDK never holds keys. In Crossmint terminology, an external wallet is a flavor of delegated signer that approves operations through the user's own wallet UI.

```dart theme={null}
abstract base class CrossmintExternalWalletSigner implements CrossmintWalletApprovalSigner
```

Signing goes through `onSign`; the signer is responsible for presenting
the user whatever approval UI their wallet provides. The `locator`
defaults to `external-wallet:<address>` when not provided explicitly.

## Constructors

### CrossmintExternalWalletSigner

```dart theme={null}
CrossmintExternalWalletSigner({
  required this.address,
  String? locator,
  required this.onSign,
})
```

Creates an external-wallet signer.

## Properties

### address

```dart theme={null}
final String address
```

The wallet address the user controls.

### locator

```dart theme={null}
final String locator
```

### onSign

```dart theme={null}
final CrossmintExternalWalletSignCallback onSign
```

User-provided signing callback. Receives the chain-specific payload and returns the resulting signature string.

## Methods

### requireSignature

```dart theme={null}
Future<String> requireSignature( String payload, { required String label, })
```

Invokes `onSign` and validates the result is non-empty. Used by subclasses to share error wrapping.
