braintree_native_ui 0.4.0 
braintree_native_ui: ^0.4.0 copied to clipboard
Plugin nativo para tokenizar cartão, rodar 3DS2 e coletar device data com Braintree usando UI própria.
braintree_native_ui #
Plugin Flutter/FlutterFlow para integração nativa com o Braintree (Android/iOS) sem Drop‑in, pensado para apps em larga escala. Tokeniza cartão, executa 3DS2, coleta device data, Apple Pay/Google Pay, PayPal (Vault/Checkout) e faz cache local de metadados não sensíveis (bandeira, últimos 4 dígitos, validade). Também permite armazenar o authorization (client token ou tokenization key) no dispositivo.
Recursos #
- Tokenização de cartão (Android/iOS)
 - 3D Secure 2
 - Coleta de device data (fraude)
 - Apple Pay (iOS) e Google Pay (Android)
 - PayPal Vault e Checkout
 - Cache local de metadados: bandeira, últimos 4, validade (no máximo 5 itens)
 - Armazenamento local do authorization (client token / tokenization key)
 - Sem necessidade de editar Podfile ou build.gradle do app (dependências ficam no plugin)
 
Instalação #
pubspec.yaml:
dependencies:
  braintree_native_ui: ^0.4.0
  http: ^1.2.2 # opcional, para fetchAndCacheClientToken()
No iOS, rode pod install no projeto do app após atualizar dependências.
Uso rápido #
import 'package:braintree_native_ui/braintree_native_ui.dart';
final bnui = BraintreeNativeUi();
// 1) Obter authorization (client token via seu backend) e salvar
final token = await bnui.fetchAndCacheClientToken(
  endpoint: Uri.parse('https://sua.api/client-token'),
  // headers: {'Authorization': 'Bearer <jwt>'},
  // body: {'customerId': '123'},
  tag: 'main',
);
// 2) Tokenizar cartão (o plugin salva bandeira/últimos 4/validade automaticamente)
final nonce = await bnui.tokenizeCard(
  authorization: token,
  number: '4111111111111111',
  expirationMonth: '12',
  expirationYear: '2030',
  cvv: '123',
);
// 3) 3DS (opcional)
final verified = await bnui.performThreeDSecure(
  authorization: token,
  nonce: nonce!,
  amount: '10.00',
);
// 4) Apple Pay / Google Pay / PayPal
await bnui.requestApplePayPayment(
  authorization: token,
  merchantIdentifier: 'merchant.com.seu.id',
  countryCode: 'US',
  currencyCode: 'USD',
  amount: '10.00',
);
await bnui.requestGooglePayPayment(
  authorization: token,
  amount: '10.00',
  currencyCode: 'USD',
);
final ppVaultNonce = await bnui.requestPayPalVault(authorization: token);
final ppCheckoutNonce = await bnui.requestPayPalCheckout(
  authorization: token,
  amount: '10.00',
  currencyCode: 'USD',
);
// 5) Ler metadados salvos para exibir no UI (FlutterFlow-friendly)
final cards = await bnui.getCachedCards();
// Ex.: [{type: 'card', brand: 'visa', last4: '1111', expirationMonth: '12', expirationYear: '2030'}]
Observações importantes #
- Client token não pode ser gerado no dispositivo. Gere no seu servidor com o SDK Server oficial da Braintree e entregue ao app (use 
fetchAndCacheClientToken()oucacheAuthorization()). - Nunca armazene número completo ou CVV. O plugin armazena apenas metadados não sensíveis (bandeira, últimos 4, validade) após a tokenização.
 - Nonces devem ser enviados ao seu backend para criar transações ou vault.
 - “Transferir dinheiro entre usuários” exige lógica no servidor (ex.: capturas, split/payouts via PayPal/Braintree). O app móvel não move fundos sozinho.
 - Apple Pay requer Merchant ID e entitlements; Google Pay requer configuração prévia. As dependências são incluídas no plugin; não é necessário editar Podfile ou build.gradle do app.
 
Veja example/ para um app de demonstração.
Licença #
MIT. Veja LICENSE.