Resumen
La alerta integrada de AIR en el Mac parece de otra década. KlugDialog muestra la auténtica: hojas de alerta nativas de macOS ancladas a la ventana de tu app, con el icono de la app, la fuente del sistema y los estilos de botón habituales.
Más allá de las alertas sencillas, cubre lo que las apps de escritorio necesitan a diario: diálogos con campos de texto (por ejemplo nombre de usuario y contraseña, también como campos seguros), varios botones con sus propios estilos y una hoja de progreso ("Conectando…") que tu código actualiza y cierra cuando termina el trabajo.
Todo es asíncrono: show() devuelve de inmediato y tu callback recibe el botón elegido. KlugDialog funciona en la versión para Mac de nuestras apps, nuestra prueba de concepto.
Novedad en Android: los mismos diálogos como diálogos nativos de Android. Los campos de texto permanecen sobre el teclado en todas las pantallas, también en horizontal en tabletas, donde antes los botones desaparecían detrás de él; las contraseñas, los nombres de usuario y las direcciones de e-mail nunca se ponen en mayúscula automáticamente, y los campos de e-mail obtienen el teclado de e-mail. La versión para Android también apila listas largas de botones, ofrece un spinner sencillo y funciona en la versión Android de nuestras apps.
También en iOS: desde la versión 1.2, la misma API muestra alertas nativas de iOS, diálogos con campos de texto y un diálogo de progreso, de modo que una sola ruta de código sirve para Android, iOS y macOS.
Funciones
- Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
- Hojas de alerta nativas de macOS con hasta tres botones
- Estilos informativo, de advertencia y crítico
- Diálogos con cualquier número de botones y campos de texto, incluidos campos seguros
- Hoja de progreso que se puede actualizar y cerrar desde el código
- Los diálogos se pueden cerrar desde el código
- Callbacks con el botón elegido y los valores introducidos
- Android: campos sobre el teclado, sin contraseñas en mayúscula automática, teclados de e-mail / numéricos, tema claro y oscuro
Plataformas compatibles
En otras plataformas isSupported devuelve false, para que tu app pueda recurrir allí a sus diálogos habituales.
Primeros pasos
Añade la extensión al descriptor de tu aplicación:
<extensions>
<extensionID>com.klug.dialog.Dialog</extensionID>
</extensions>
Ejemplos de código
Cinco flujos completos. Cada llamada devuelve de inmediato; el resultado llega más tarde en tu callback, de modo que la app nunca se bloquea mientras hay un diálogo abierto. Documentación completa →
import com.klug.dialog.Dialog; var dialog:Dialog = Dialog.getInstance(); if ( dialog.isSupported ) { dialog.show( "Saved", "The recording is in your library." ); // one "OK" button } else { showAppAlert( "Saved" ); // your app's own fallback dialog, e.g. on Windows }
dialog.show( "Delete recording?", "This cannot be undone.", [ "Delete", "Keep" ], function( index:int ):void { // index = position in the buttons array; // -1 = closed without a button, e.g. the Android back key if ( index == 0 ) deleteRecording(); // your app }, Dialog.STYLE_WARNING ); // alert style of the macOS sheet
var buttons:Array = [ { label:"Cancel", style:4, tag:0 }, // style 4 = cancel, 3 = destructive { label:"Sign in", style:0, tag:1 } ]; var fields:Array = [ { placeholder:"E-mail", text:lastEmail, keyboardType:7 }, // 7 = e-mail keyboard { placeholder:"Password", secure:true } // never auto-capitalised ]; dialog.present( "Sign in", "Please enter your account.", true, buttons, fields, function( tag:int, values:Array, cancelled:Boolean = false ):void { if ( cancelled ) return; // closed without a button (tag -1) if ( tag == 1 ) signIn( values[0], values[1] ); // values in field order }, null, "dark" ); // theme on Android and iOS; macOS follows the system
// your own id: the same dialog is updated and closed with it dialog.progressShow( "connect", "Connecting", "Contacting the server…", false, function():void { trace( "progress dialog closed" ); } ); // fires once dialog.progressUpdate( "connect", "Signing in…" ); // when the work is done, or has failed dialog.progressDismiss( "connect" );
// pass your own id as the 7th parameter to close the dialog later dialog.present( "Waiting for the camera", "Tap Cancel to stop waiting.", false, [ { label:"Cancel", style:4, tag:0 } ], null, function( tag:int, values:Array ):void { stopWaiting(); }, // your app "waitCamera" ); // the camera has answered: close the dialog, no callback fires dialog.presentDismiss( "waitCamera" );
Resumen de la API
| Dialog.getInstance() | Devuelve la instancia única. |
| isSupported | Verdadero en Android, iOS y macOS; falso en el resto, por ejemplo en Windows. |
| show(title, message, buttons, callback, style) | Alerta con hasta tres botones (por defecto "OK"); callback(index), -1 si se cerró sin pulsar un botón. Devuelve false si no es compatible. |
| present(title, message, cancelable, buttons, fields, callback, id, theme) | Diálogo con cualquier número de botones y campos de texto; callback(tag, values, cancelled). Pasa tu propio id para cerrarlo más tarde; theme "light" o "dark" en Android e iOS. |
| presentDismiss(id) | Cierra un diálogo de present() desde el código; no se dispara ningún callback. |
| progressShow(id, title, message, cancelable, closeCallback, theme) | Diálogo de progreso con un spinner; closeCallback se dispara una vez cuando desaparece. |
| progressUpdate(id, message) / progressDismiss(id) | Cambia el texto del diálogo de progreso / lo cierra. |
| STYLE_INFO, STYLE_WARNING, STYLE_CRITICAL | Estilos de alerta para show(), usados por la hoja de alerta de macOS. |
| Button {label, style, tag} | style: 0 predeterminado, 1 positivo, 2 negativo, 3 destructivo, 4 cancelar, 5 neutro. Android usa todos, iOS usa 3 y 4, macOS muestra todos los botones por igual. |
| Field {placeholder, secure, text, keyboardType, autocorrect, autocap} | keyboardType: 0 predeterminado, 3 URL, 4 número, 5 teléfono, 7 e-mail, 8 decimal. autocap: 0 ninguna (por defecto), 1 oraciones, 2 palabras, 3 todo. Los tres últimos se aplican en Android e iOS. |
Compra KlugDialog
Una licencia anual para una aplicación AIR, con todas las actualizaciones durante 12 meses. Tras el pago recibes la extensión, la biblioteca ActionScript y la documentación por e-mail, normalmente en un día hábil. Licencia y términos
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Sin soporte
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 7 días
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 48 horas
Requisitos
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 o posterior |
| iOS | iOS 13 o posterior |
| macOS | macOS 11 o posterior |