Orientação gerada a partir de informações públicas. Apenas para referência.
AnyAnimatedButton é um pacote Flutter que fornece um botão personalizável com animações suaves entre os estados ocioso, progresso, sucesso e erro. Ele indica visualmente processos em segundo plano em andamento, melhorando o feedback do usuário durante ações como envio de formulários ou carregamento de dados. O botão oferece várias personalizações, incluindo cores, ícones, rótulos e durações de animação. Projetado para uso multiplataforma, funciona perfeitamente em Android, iOS, Web, macOS, Windows e Linux. Ideal para melhorar a experiência do usuário em aplicativos que exigem feedback em tempo real.
Casos de uso
Envio de formulário com estado de carregamento
indicador de progresso do upload de arquivo
Fluxo de autenticação com feedback de sucesso/erro
Processo de onboarding com transições animadas
Visualização de status de tarefa em segundo plano
Principais recursos
animações suaves de transição de estado
Estados de sucesso e erro personalizáveis
Suporte para mudanças de ícones e texto por estado
Compatibilidade multiplataforma
Duração e suavização de animação configuráveis
Opções de estilização extensíveis
Indicado para
Desenvolvedores em busca de feedback intuitivo na interface
Aplicativos com operações assíncronas frequentes
Aplicações móveis e web centradas na experiência do usuário
Prototipagem rápida de botões interativos
Projetos que exigem mínimo boilerplate para indicadores de progresso
Considerações
Requer conhecimento sobre gerenciamento de estado do Flutter
Pode ser necessário lógica adicional para disparar mudanças de estado
Impacto no desempenho com múltiplas instâncias
Limitado a tipos de animação pré-definidos
Não adequado para animações personalizadas complexas além dos estados fornecidos
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
any_animated_button
Very often after tapping a button we send some data or form to remote API and we need to signalize it to the user. This package makes it easy for us by creating expandable AnyAnimatedButton and AnyAnimatedButtonBloc.
Easy usage
AnyAnimatedButton depends on bloc pattern. To create custom button we need to create new bloc and
widget.
AnyAnimatedButtonBloc
We need to create class, which extends AnyAnimatedButtonBloc and override asyncAction.
AnyAnimatedButton is based on AnimatedContainer. To create our own button we need to create class, which extends CustomAnyAnimatedButton. CustomAnyAnimatedButton consists of 2 fields, which needs to be overridden:
bloc - AnyAnimatedButtonBloc? - bloc which should be connected with the button. If we won't pass it, the button won't animate
defaultParams - AnyAnimatedButtonParams - params object, which describes how button should look and behave
and 3 optional fields:
progressParams - AnyAnimatedButtonParams - params object for describing button in progress state
successParams - AnyAnimatedButtonParams - params object for describing button in success state
errorParams - AnyAnimatedButtonParams - params object for describing button in error state
AnyAnimatedButtonParams
The class that holds all the data about button look and behavior. All properties that we want to animate should be put directly inside all corresponding fields. Rest of them (like Text) should go to child field, which takes Widget.
The only required field is height, rest of them are optional.
We have got also 3 factory constructors, which describe default progress, error and success button state. We can reuse them with changed colors and size.
double.infinity - the button expands as much as he can
null - the button is as small as it can - it fits its content
fixed - we can set fixed width i.e. 200 and the button will always be this wide
Splash effect
There is one problem with InkWell splash effect. If we want the splash effect to work we need to put in child field firstly Material with transparent color → InkWell → rest of the child.
The package has built-in BlocListener, which makes it easier for you to listen to the state changes. AnyAnimatedButtonBlocListener<Input, Output, Failure> takes 3 generic types,Input is type of data that goes into the bloc, Output is type of data returned on success and Failure is the error which will be returned, when any error occurs in bloc.
updating text on button with width set to null does not work properly. The button width will adjust only to the first text width. The workaround is to set fixed width of the longer text instead of null.