Estou apenas começando a pegar o jeito do Flutter, mas estou tendo problemas para descobrir como definir o estado ativado de um botão.
Nos documentos, ele diz para definir onPressed
como nulo para desativar um botão e dar a ele um valor para ativá-lo. Isso é bom se o botão continuar no mesmo estado durante o ciclo de vida.
Tenho a impressão de que preciso criar um widget Stateful personalizado que me permitirá atualizar o estado ativado do botão (ou retorno de chamada onPressed) de alguma forma.
Então, minha pergunta é como eu faria isso? Parece um requisito bastante simples, mas não consigo encontrar nada nos documentos sobre como fazer isso.
Obrigado.
Respostas:
Acho que você pode querer introduzir algumas funções auxiliares em
build
seu botão, bem como um widget Stateful junto com algumas propriedades para desligar.isButtonDisabled
)onPressed
valor para umanull
ou outra funçãoonPressed: () {}
isButtonDisabled
como parte desta condição e retorne umanull
ou alguma função.setState(() => isButtonDisabled = true)
para inverter a variável condicional.build()
método novamente com o novo estado e o botão será renderizado com umnull
manipulador de pressão e desabilitado.Aqui está um pouco mais de contexto usando o projeto Contador de oscilação.
Neste exemplo, estou usando um ternário in-line para definir condicionalmente o
Text
eonPressed
, mas pode ser mais apropriado para você extrair isso em uma função (você pode usar o mesmo método para alterar o texto do botão também):fonte
onPressed: _isButtonDisabled ? null : () => _incrementCounter
return () {}
então isso é intencional. Não quero usar a seta grande aqui, pois quero que a função seja executada e retornenull
e desative o botão.disabled
propriedade, equipe Flutter? Isso não é intuitivo: - /De acordo com a documentação:
"Se o retorno de chamada onPressed for nulo, o botão será desativado e, por padrão, se parecerá com um botão plano na disabledColor."
https://docs.flutter.io/flutter/material/RaisedButton-class.html
Então, você pode fazer algo assim:
fonte
disabledElevation
,disabledColor
eDisabledTextColor
não funcionará como esperado.A resposta simples é
onPressed : null
fornecer um botão desativado.fonte
Configuração
e
fonte
onPressed
é sempre uma função, então o botão é renderizado como 'clicável', embora ele ignore o evento de clique se aisEnabled
propriedade for definida. Para realmente desabilitar o botão, useRaisedButton(onPressed: isEnabled ? _handleClick : null
Para um número específico e limitado de widgets, envolvê-los em um widget IgnorePointer faz exatamente isso: quando sua
ignoring
propriedade é definida como true, o sub-widget (na verdade, a subárvore inteira) não é clicável.Caso contrário, se você pretende desabilitar uma subárvore inteira, procure em AbsorbPointer ().
fonte
A funcionalidade Habilitar e Desabilitar é a mesma para a maioria dos widgets.
Ex: botão, interruptor, caixa de seleção etc.
Basta definir a
onPressed
propriedade conforme mostrado abaixoonPressed : null
retorna widget desativadoonPressed : (){}
ouonPressed : _functionName
retorna widget Ativadofonte
Você também pode usar o AbsorbPointer da seguinte maneira:
Se você quiser saber mais sobre este widget, você pode verificar o seguinte link Flutter Docs
fonte
Esta é a maneira mais fácil na minha opinião:
fonte