Este es el paquete oficial de Dodo Payments para Flutter (
dodopayments_checkout
en pub.dev). También existe un paquete independiente desarrollado por la comunidad; consulta
Proyectos de la comunidad.Checkout Sessions API
Crea el checkout_url que este SDK abre desde tu backend.
Mobile Integration Guide
Consulta cómo encaja esto en el flujo de pago móvil completo.
dodopayments_checkout abre el checkout alojado de Dodo en
SFSafariViewController en iOS y en una pestaña personalizada de Chrome en Android: los mismos
núcleos nativos que utilizan los SDK independientes de iOS y
Android. Toda la lógica del checkout reside en
esos núcleos nativos; la capa de Dart pasa la llamada a través de un canal
Pigeon tipado. No contiene ninguna API key ni
realiza llamadas a la API de Dodo Payments.
Requiere Flutter 3.44+ / Dart 3.12+, iOS 16+ y Android minSdk 23.
Instalación
1
Add the Dependency
pubspec.yaml
2
Register a Callback URL Scheme
- iOS
- Android
Añade un tipo URL para tu esquema en Después, reenvía las URL entrantes (por ejemplo, mediante
ios/Runner/Info.plist:ios/Runner/Info.plist
app_links) al SDK, porque
SFSafariViewController no puede detectar su propia URL de retorno:Es seguro reenviar aquí todas las URL.
handleOpenURL solo actúa sobre las URL
que coinciden con tu returnUrl registrado y resuelve false para cualquier
otra URL.Uso
Qué significa el resultado
CheckoutStatus
requerido
Uno de
succeeded, failed, cancelled, pending, expired.String?
Se establece cuando la URL de retorno incluía uno. Muéstralo en la interfaz; no lo uses
para conceder acceso. Consulta Verificar el pago más abajo.
String?
Se establece para los checkouts de suscripciones.
List<String>?
Se establece cuando el checkout incluye productos con claves de licencia.
String?
Se establece cuando el checkout captura un correo electrónico.
Map<String, String>
Cada parámetro de consulta de la URL de retorno, literalmente.
Verificar el pago
Webhooks
Dodo Payments llama a tu backend cuando un pago se realiza correctamente o se activa una suscripción.
Get Payment Detail
Consulta
paymentId con tu secret key para comprobar su estado directamente.result.status.
Personalización de la apariencia
Personaliza la barra de herramientas, los botones y la combinación de colores del navegador de checkout mediantecustomization en CheckoutParams. Las opciones están agrupadas por plataforma porque
Custom Tab de Android y SFSafariViewController de iOS exponen distintos
controles nativos. Todos los campos son opcionales; si omites customization, se utiliza la
apariencia predeterminada de cada plataforma.
Android — Custom Tab
Android — Custom Tab
Color?
Color de fondo de la barra de herramientas.
Color de la barra de navegación.
Color del separador sobre la barra de navegación.
CloseButtonStyle
standard muestra el icono de sistema “X”; back dibuja una flecha de retroceso en su lugar.CloseButtonPosition
En qué lado de la barra de herramientas aparece el botón de cierre.
Muestra el icono de compartir de la barra de herramientas.
bool
Muestra el título de la página debajo de la URL en la barra de herramientas.
bool
Permite que la barra de herramientas se oculte automáticamente mientras se desplaza la página.
bool
Muestra “Añadir esta página a marcadores” en el menú adicional.
bool
Muestra “Descargar página” en el menú adicional.
BrowserColorScheme
Fuerza la apariencia clara u oscura independientemente de la configuración del sistema del dispositivo.
iOS — SFSafariViewController
iOS — SFSafariViewController
DismissButtonStyle
Etiqueta o icono del botón de descartar.
PresentationStyle
pageSheet se muestra como una tarjeta que se puede descartar deslizando; fullScreen cubre toda la pantalla.bool
Permite que la barra de herramientas se contraiga al desplazarse. Solo está visible cuando
presentationStyle es fullScreen; pageSheet mantiene las barras fijadas independientemente de esta configuración.BrowserColorScheme
Fuerza la apariencia clara u oscura independientemente de la configuración del sistema del dispositivo.
Errores
start lanza CheckoutException únicamente por un uso incorrecto o un fallo de la plataforma.
Un pago cancelado o rechazado siempre es un resultado, nunca una excepción.
invalidCheckoutUrl(INVALID_CHECKOUT_URL): no es una URL de sesión decheckout.dodopayments.com.invalidReturnUrl(INVALID_RETURN_URL): no es una URL absoluta válida.alreadyInProgress(ALREADY_IN_PROGRESS): ya hay un checkout en ejecución.platformError(PLATFORM_ERROR): fallo inesperado de la plataforma.
Sesiones abandonadas
Si la aplicación se cierra durante el checkout, recupera la sesión en el siguiente inicio y
reconcíliala con tu backend.
Relacionado
Mobile Integration Guide
El mismo contrato para Android, iOS y React Native.
Community Projects
También existe un paquete de Flutter independiente desarrollado por la comunidad.