Ir para o conteúdo do rodapé
Iron Academy Logo
Aplicação C#
Aplicação C#

Outras categorias

Spinner de espera personalizado - Série de consoles Spectre

Tim Corey
6m 12s

Spectre Console é uma biblioteca .NET que permite criar aplicativos de console visualmente atraentes, com saída rica, cores e formatação. Tim Corey inicia seu vídeo " Crie um Spinner de Espera Personalizado - Série Spectre Console " lembrando-nos que o Spectre Console transforma aplicativos de console C# simples em ferramentas visualmente mais atraentes e informativas. Nesta lição, Tim mostra como implementar um indicador de carregamento personalizado — um recurso pequeno, porém poderoso, que pode facilitar o acompanhamento dos indicadores de status e progresso do seu programa de console.

Tim explica aos 0:16 que o código-fonte do projeto está disponível no link abaixo do vídeo. Ele incentiva os espectadores a testarem e experimentarem por si mesmos, alterando configurações ou adicionando recursos para entender como funciona em seu próprio ambiente. Isso é especialmente útil se você quiser oferecer suporte a diferentes terminais, como o Terminal do Windows ou o PowerShell, que têm comportamentos ligeiramente diferentes para caracteres Unicode.

Usando um Spinner integrado

Tim começa com um exemplo simples. Às 0:37, ele escreve um código usando AnsiConsole.Status para exibir um estilo de indicador de carregamento conhecido enquanto algum trabalho é executado em segundo plano. Ele seleciona Spinner.Known.Aesthetic, mas observa que o Spectre oferece muitas opções na lista Spinner.Known. Tim adiciona a string "Carregando" para exibir ao lado do indicador de carregamento, para que o usuário saiba o que está acontecendo.

Dentro do bloco de status, Tim insere um Thread.Sleep(10000) — dez segundos — apenas para teste. Isso força o console a exibir o indicador de carregamento em ação por tempo suficiente para que seja possível vê-lo. Ele explica em 1:23 que, assim que a tarefa for concluída, o indicador de carregamento desaparece automaticamente. Este é o padrão que o Spectre recomenda para exibir o status ou o progresso em um aplicativo de console.

Rumo a um spinner personalizado

À 1:41, Tim diz: "Ok, vamos criar um spinner personalizado", mostrando como ir além das opções integradas. Ele explica que, às vezes, você deseja formatar ou estilizar seu spinner de uma maneira que combine com seu projeto, as cores da sua marca ou até mesmo o tipo de dados que você está processando. Ao escrever sua própria classe de spinner, você controla os frames, o tempo e se ela usa caracteres Unicode ou não.

Criando a Classe Spinner

Tim cria um novo arquivo chamado TestSpinner.cs. Às 2h05, ele torna a classe pública e a define como herdada da classe abstrata Spinner do Spectre. Ele utiliza o recurso "implementar classe abstrata" do Visual Studio para gerar os membros necessários. Aqui você fornece seus próprios valores — como velocidade, quadros e configurações Unicode — em vez de usar os valores padrão.

Tim destaca em 2:18 que essas são propriedades somente de leitura (get), o que torna mais simples escrever membros com corpo de expressão. Esse formato mantém a definição do seu spinner compacta e mais fácil de manter ou atualizar posteriormente.

Controlando a velocidade por quadro

Às 2:30, Tim define a propriedade de temporização para TimeSpan.FromMilliseconds(200). Isso significa que o spinner se moverá a cerca de cinco quadros por segundo. Ele explica que você pode selecionar um valor diferente se quiser que o ponteiro gire mais rápido ou mais devagar. Ajustar essa configuração é uma maneira fácil de melhorar a sensação da sua animação de carregamento, dependendo do que seu comando ou processo está fazendo.

Manipulação de caracteres Unicode

Às 3h, Tim aborda uma questão fundamental: Unicode. Ele observa que, ao executar seu projeto no console integrado do Visual Studio, os caracteres Unicode podem não ser renderizados corretamente, causando erros ou símbolos ausentes. No entanto, se você executar o mesmo projeto no Terminal do Windows ou no PowerShell, o Unicode e os emojis geralmente são exibidos corretamente. Em sua demonstração, ele define a propriedade como falsa para evitar esse problema, mas ressalta que você pode defini-la como verdadeira quando seu terminal oferecer suporte a isso.

Isso facilita a adição de símbolos coloridos, setas ou até mesmo indicadores de progresso baseados em emojis ao seu aplicativo. Você pode formatar quadros com ✅, 🌧, 🔄 ou quaisquer caracteres que desejar para fornecer informações mais detalhadas.

Definindo os Quadros

A próxima propriedade é a lista de frames. Aos 3:34, Tim escreve uma função de seta que retorna um array de strings. Cada fio representa um "quadro" do girador. Em seu exemplo, ele usa um "O" grande e vários "o"s pequenos para simular o movimento ao longo da linha.

Ele copia e cola o quadro base cinco vezes e, em seguida, às 4:12, substitui um "O" em uma posição diferente em cada quadro. Isso cria uma animação simples: o grande "O" parece se mover da esquerda para a direita e, em seguida, retorna ao ponto inicial. Tim observa em 4:26 que você pode adicionar mais quadros para inverter a direção, adicionar formatação de cores (o Spectre suporta marcação avançada como [texto verde]texto[/]), ou experimentar com caracteres Unicode se o seu console os suportar.

Aqui está o código da classe TestSpinner de Tim:

using Spectre.Console;

namespaces SpectreDemos;

public class TestSpinner : Spinner
{
    public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);

    public override bool IsUnicode => false;

    public override IReadOnlyList<string> Frames => 
    [
        "Ooooo",
            "oOooo",
            "ooOoo",
            "oooOo",
            "ooooO"
    ]
}
using Spectre.Console;

namespaces SpectreDemos;

public class TestSpinner : Spinner
{
    public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);

    public override bool IsUnicode => false;

    public override IReadOnlyList<string> Frames => 
    [
        "Ooooo",
            "oOooo",
            "ooOoo",
            "oooOo",
            "ooooO"
    ]
}

Implementando e testando o Spinner personalizado

Assim que a classe estiver definida, Tim retorna ao seu programa principal. Às 4:42, ele substitui Spinner.Known.Aesthetic por um novo TestSpinner(). É isso — nenhuma outra alteração de código é necessária. Em seguida, ele executa o aplicativo às 4:52 para mostrar o novo indicador de carregamento em ação.

Spectre Console Custom Waiting Spinner 1 related to Implementando e testando o Spinner personalizado

Esta etapa de teste é importante. Tim recomenda que você execute seu projeto no mesmo terminal que seus usuários usarão, para que você possa encontrar problemas com codificação, cores ou sincronização logo no início. Diferentes estilos de tema e fontes podem afetar a aparência do seu seletor de carregamento.

Spectre Console Custom Waiting Spinner 2 related to Implementando e testando o Spinner personalizado

Adicionando Unicode, Emojis e Cores

Tim explica às 5:00 que nada impede você de usar emojis ou caracteres especiais como molduras se o Unicode estiver ativado. Você pode criar um indicador de previsão do tempo, uma barra de progresso verde usando a linguagem de marcação do Spectre ou qualquer exibição criativa que se adapte à sua aplicação. Isso é especialmente útil para comandos que demoram muito para iniciar ou continuar em execução, pois os usuários apreciam um feedback visual claro.

Ele também observa que o Spectre Console facilita a adição de cores e texto formatado ao seu spinner. Por exemplo, você pode escrever "[verde]Carregando..." ao lado do indicador de carregamento para enfatizar o sucesso ou destacar erros com texto vermelho quando necessário.

Dicas e configurações de desempenho

Aos 5:19, Tim resume os principais elementos necessários para um spinner personalizado:

  • Tempo: quanto tempo cada quadro é exibido.

  • IsUnicode: indica se deve usar Unicode/emoji ou texto simples.

  • Frames: o conjunto de strings que você anima.

Ele alerta que um número excessivo de frames ou uma velocidade muito lenta podem fazer com que os usuários nunca vejam os últimos frames, a menos que o processo seja muito longo. Selecionar as opções corretas aqui torna seu spinner mais eficaz. Essas configurações também facilitam o incremento do seu projeto ao longo do tempo — você pode adicionar mais quadros ou ajustar o tempo sem precisar reescrever todo o seu aplicativo de console.

Concluindo

Aos 5:38, Tim mostra que, ao herdar da classe Spinner e fornecer seus próprios valores, você pode criar rapidamente um indicador de carregamento personalizado para seu console ou ferramentas baseadas em PowerShell. Isso lhe dá mais controle sobre as informações e a experiência que você proporciona aos seus usuários. Aos 5:47, ele lembra aos espectadores que o código-fonte e a documentação estão na descrição do vídeo para que possam explorá-lo e estendê-lo por conta própria.

Conclusão

Seguindo o vídeo de Tim Corey, vimos exatamente como implementar um indicador de carregamento personalizado para o Spectre Console: herdar da classe Spinner, fornecer um valor de tempo, especificar o suporte a Unicode e definir os frames. Em seguida, basta substituir um spinner conhecido pela sua nova classe para adicioná-la ao seu projeto. Tim também aponta maneiras de adicionar caracteres Unicode, emojis e marcação de cores para tornar as exibições de status e progresso do seu aplicativo de console mais informativas e bonitas.

Ao utilizar os recursos do Spectre Console, você pode fornecer feedback mais claro, encontrar e corrigir problemas mais cedo e criar aplicativos de console visualmente atraentes que os usuários irão adorar.

Hero Worlddot related to Spinner de espera personalizado - Série de consoles Spectre
Hero Affiliate related to Spinner de espera personalizado - Série de consoles Spectre

Ganhe mais compartilhando o que você ama.

Você cria conteúdo para desenvolvedores que trabalham com .NET, C#, Java, Python ou Node.js? Transforme sua expertise em renda extra!

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim