Skip to main content
Para Flutter SDK eliminates the complexity of blockchain integration by providing a unified interface for wallet creation, authentication, and multi-chain transactions across iOS and Android.

Quick Start

main.dart
// Initialize Para
final para = Para.fromConfig(
  config: ParaConfig(
    apiKey: 'YOUR_API_KEY',
    environment: Environment.beta,
  ),
  appScheme: 'yourapp',
);

// Prepare a web authentication session for browser-based auth flows
final webAuthSession = FlutterWebAuthSession(
  callbackUrlScheme: 'yourapp',
);

// Authenticate user
final authState = await para.initiateAuthFlow(
  auth: Auth.email('user@example.com'),
);

switch (authState.stage) {
  case AuthStage.login:
    // One‑Click Login when a loginUrl is provided
    final url = authState.loginUrl;
    if (url?.isNotEmpty == true) {
      await para.presentAuthUrl(
        url: url!,
        webAuthenticationSession: webAuthSession,
      );

      await para.waitForLogin();
      await para.touchSession();
      await para.fetchWallets();
      break;
    }

    // Fallback to other login methods
    await para.handleLogin(
      authState: authState,
      webAuthenticationSession: webAuthSession,
    );
    break;

  case AuthStage.verify:
    // Show OTP UI, then continue the flow
    break;

  case AuthStage.signup:
    // Call handleSignup if passkeys/passwords are enabled
    break;
}

Sign Transactions

transaction_handler.dart
// Get wallets
final wallets = await para.fetchWallets();
final evmWallet = wallets.firstWhere((w) => w.type == WalletType.evm && w.id != null);
final solanaWallet = wallets.firstWhere((w) => w.type == WalletType.solana && w.id != null);

// EVM transaction
final evmTx = EVMTransaction(
  to: '0x742d35Cc6634C0532925a3b844Bc9e7595f6E2c0',
  value: '1000000000000000', // 0.001 ETH in wei
  chainId: '11155111',
  type: 2, // EIP-1559
);

final evmResult = await para.signTransaction(
  walletId: evmWallet.id!,
  transaction: evmTx.toJson(),
  chainId: '11155111',
  rpcUrl: 'https://rpc.ankr.com/eth_sepolia',
);

if (evmResult is SuccessfulSignatureResult) {
  final signedTx = evmResult.signedTransaction;
  // Broadcast signedTx using your RPC client
}

// Solana message signing
final solanaResult = await para.signMessage(
  walletId: solanaWallet.id!,
  message: 'Hello, Solana!',
);

if (solanaResult is SuccessfulSignatureResult) {
  final signature = solanaResult.signedTransaction; // Base64 signature string
}

Next Steps

I