Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

AlertDialog

Pessoal, me tirem uma duvida. Tenho essa validacao, mas somente funciona quando nao tem mais nada para executar. Por exemplo, se somente eh essa validacao e o restante do codigo esta no ELSE, o alert demonstra na tela, mas se o restante do codigo nao esta no else ele nao demonstra o alert.

Nao demonstra

 ...
 if (label.isEmpty){
      showDialog(
        context: context, 
        builder: (context) {
          return AlertDialogWidgets(
            title: 'Erro',
            buttontext: 'OK',
            content: 'Ler uma etiqueta.',
          );
        }
      );
    }
    ...
    
    demonstra
     ...
 if (label.isEmpty){
      showDialog(
        context: context, 
        builder: (context) {
          return AlertDialogWidgets(
            title: 'Erro',
            buttontext: 'OK',
            content: 'Ler uma etiqueta.',
          );
        }
      );
    }else{
        demais codigo
    }
Porque?
1 resposta
solução!

Oii, Anderson, tudo bem?

No Flutter, a função showDialog é assíncrona e não bloqueia a execução do código subsequente. Isso significa que enquanto o diálogo é exibido, o restante do código continua sendo executado. Se o código que vem depois altera o estado da aplicação de uma forma que afeta a visibilidade do diálogo, isso pode fazer com que o diálogo não seja exibido da maneira certa.

Uma solução para isso é garantir que o código que você não quer que execute enquanto o diálogo esteja aberto seja colocado dentro do bloco else do if, como você fez no segundo exemplo. Isso garante que esse código só será executado se a condição do if não for verdadeira, ou seja, se o diálogo não precisar ser mostrado.

Se precisar que o código seja executado somente após o fechamento do diálogo, você pode usar o await com o showDialog, que espera o diálogo ser fechado antes de continuar com a execução do código subsequente. Você pode implementar isso deste jeito, por exemplo:

...
if (label.isEmpty) {
  await showDialog(
    context: context, 
    builder: (context) {
      return AlertDialogWidgets(
        title: 'Erro',
        buttontext: 'OK',
        content: 'Ler uma etiqueta.',
      );
    }
  );
  // Código que deve ser executado apenas após o fechamento do diálogo
} else {
  // demais código
}
...

Obs: para usar await, a função que contém esse código deve ser marcada como async.

Se outra dúvida surgir, sinta-se à vontade para perguntar nos fóruns.

Abraços.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.