Visão geral
O alerta embutido do AIR no Mac parece vindo de outra década. O KlugDialog mostra o original: sheets de alerta nativas do macOS ligadas à janela do seu app, com o ícone do app, a fonte do sistema e os estilos de botão conhecidos.
Além dos alertas simples, ele cobre o que os apps de desktop precisam todo dia: diálogos com campos de texto (por exemplo nome de usuário e senha, também como campos seguros), vários botões com estilos próprios e uma sheet de progresso ("Conectando…") que o seu código atualiza e fecha quando o trabalho termina.
Tudo é assíncrono: show() retorna imediatamente, e o seu callback recebe o botão escolhido. O KlugDialog roda na versão para Mac de nossos apps, nossa prova de conceito.
Novo no Android: os mesmos diálogos como diálogos nativos do Android. Os campos de texto ficam acima do teclado em todas as telas, também em paisagem nos tablets, onde os botões antes sumiam atrás dele; senhas, nomes de usuário e endereços de e-mail nunca são capitalizados automaticamente, e os campos de e-mail recebem o teclado de e-mail. A versão Android também empilha listas longas de botões, oferece um spinner simples e roda na versão Android de nossos apps.
Também no iOS: desde a versão 1.2, a mesma API mostra alertas nativos do iOS, diálogos com campos de texto e um diálogo de progresso, de modo que um único caminho de código atende Android, iOS e macOS.
Recursos
- Autossuficiente: uma ANE, sem biblioteca principal nem ANEs de dependência para adicionar
- Sheets de alerta nativas do macOS com até três botões
- Estilos informativo, de aviso e crítico
- Diálogos com qualquer número de botões e campos de texto, incluindo campos seguros
- Sheet de progresso que pode ser atualizada e fechada pelo código
- Os diálogos podem ser fechados pelo código
- Callbacks com o botão escolhido e os valores digitados
- Android: campos acima do teclado, senhas sem capitalização automática, teclados de e-mail / numérico, tema claro e escuro
Plataformas compatíveis
Em outras plataformas, isSupported retorna false, para que o seu app possa recorrer aos diálogos habituais.
Primeiros passos
Adicione a extensão ao descritor do seu aplicativo:
<extensions>
<extensionID>com.klug.dialog.Dialog</extensionID>
</extensions>
Exemplos de código
Cinco fluxos completos. Cada chamada retorna imediatamente; o resultado chega depois no seu callback, então o app nunca trava enquanto um diálogo está aberto. Documentação 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" );
Visão geral da API
| Dialog.getInstance() | Retorna a instância única. |
| isSupported | Verdadeiro no Android, iOS e macOS; falso nos demais, por exemplo no Windows. |
| show(title, message, buttons, callback, style) | Alerta com até três botões (padrão "OK"); callback(index), -1 se fechado sem um botão. Retorna false se não houver suporte. |
| present(title, message, cancelable, buttons, fields, callback, id, theme) | Diálogo com qualquer número de botões e campos de texto; callback(tag, values, cancelled). Passe o seu próprio id para fechá-lo depois; tema "light" ou "dark" no Android e iOS. |
| presentDismiss(id) | Fecha um diálogo present() pelo código; nenhum callback é disparado. |
| progressShow(id, title, message, cancelable, closeCallback, theme) | Diálogo de progresso com spinner; o closeCallback é disparado uma vez quando ele desaparece. |
| progressUpdate(id, message) / progressDismiss(id) | Altera o texto do diálogo de progresso / fecha-o. |
| STYLE_INFO, STYLE_WARNING, STYLE_CRITICAL | Estilos de alerta para show(), usados pela sheet de alerta do macOS. |
| Button {label, style, tag} | style: 0 padrão, 1 positivo, 2 negativo, 3 destrutivo, 4 cancelar, 5 neutro. O Android usa todos, o iOS usa 3 e 4, o macOS mostra todos os botões iguais. |
| Field {placeholder, secure, text, keyboardType, autocorrect, autocap} | keyboardType: 0 padrão, 3 URL, 4 número, 5 telefone, 7 e-mail, 8 decimal. autocap: 0 nenhuma (padrão), 1 frases, 2 palavras, 3 tudo. Os três últimos valem no Android e iOS. |
Compre o KlugDialog
Uma licença anual para um app AIR, com todas as atualizações por 12 meses. Após o pagamento, você recebe a extensão, a biblioteca ActionScript e a documentação por e-mail, normalmente em até um dia útil. Licença e termos
- Licença para um app AIR
- Todas as atualizações por 12 meses
- Sem suporte
- Licença para um app AIR
- Todas as atualizações por 12 meses
- Resposta por e-mail em até 7 dias
- Licença para um app AIR
- Todas as atualizações por 12 meses
- Resposta por e-mail em até 48 horas
Requisitos
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 ou posterior |
| iOS | iOS 13 ou posterior |
| macOS | macOS 11 ou posterior |