Estoy empezando a acostumbrarme a Flutter, pero tengo problemas para averiguar cómo configurar el estado habilitado de un botón.
En los documentos, dice establecer onPressed
en nulo para deshabilitar un botón y darle un valor para habilitarlo. Esto está bien si el botón continúa en el mismo estado durante el ciclo de vida.
Tengo la impresión de que necesito crear un widget Stateful personalizado que me permita actualizar el estado habilitado del botón (o la devolución de llamada onPressed) de alguna manera.
Entonces mi pregunta es ¿cómo haría eso? Esto parece un requisito bastante sencillo, pero no puedo encontrar nada en los documentos sobre cómo hacerlo.
Gracias.
Respuestas:
Creo que es posible que desee introducir algunas funciones auxiliares en
build
su botón, así como un widget con estado junto con alguna propiedad para eliminar.isButtonDisabled
)onPressed
valor en ningunanull
función o en algunaonPressed: () {}
isButtonDisabled
como parte de este condicional y devuelvanull
una función o alguna.setState(() => isButtonDisabled = true)
para invertir la variable condicional.build()
método con el nuevo estado y el botón se renderizará con unnull
controlador de prensa y se desactivará.Aquí hay más contexto usando el proyecto de contador Flutter.
En este ejemplo, estoy usando un ternario en línea para establecer condicionalmente el
Text
yonPressed
, pero puede ser más apropiado que extraiga esto en una función (puede usar este mismo método para cambiar el texto del botón también):fuente
onPressed: _isButtonDisabled ? null : () => _incrementCounter
return () {}
por lo que es intencional. No quiero usar la flecha gruesa aquí porque quiero que la función se ejecute y regresenull
y desactive el botón.disabled
propiedad, equipo de Flutter? Esto simplemente no es intuitivo: - /Según los documentos:
"Si la devolución de llamada onPressed es nula, entonces el botón se desactivará y de forma predeterminada se parecerá a un botón plano en disabledColor".
https://docs.flutter.io/flutter/material/RaisedButton-class.html
Entonces, podrías hacer algo como esto:
fuente
disabledElevation
,disabledColor
yDisabledTextColor
no funcionará como se esperaba.La respuesta simple es
onPressed : null
un botón desactivado.fuente
Ajuste
y
fuente
onPressed
es siempre una función, por lo que el botón se representa como 'seleccionable', aunque ignorará el evento de clic siisEnabled
se establece la propiedad. Para deshabilitar realmente el botón, useRaisedButton(onPressed: isEnabled ? _handleClick : null
Para un número específico y limitado de widgets, envolverlos en un widget IgnorePointer hace exactamente esto: cuando su
ignoring
propiedad se establece en verdadera, no se puede hacer clic en el sub-widget (en realidad, todo el subárbol).De lo contrario, si tiene la intención de deshabilitar un subárbol completo, busque en AbsorbPointer ().
fuente
La funcionalidad de habilitar y deshabilitar es la misma para la mayoría de los widgets.
Ej. Botón, interruptor, casilla de verificación, etc.
Simplemente configure la
onPressed
propiedad como se muestra a continuaciónonPressed : null
devuelve el widget deshabilitadoonPressed : (){}
oonPressed : _functionName
devuelve el widget habilitadofuente
También puede usar AbsorbPointer, y lo puede usar de la siguiente manera:
Si quieres saber más sobre este widget, puedes consultar el siguiente enlace Flutter Docs
fuente
Esta es la forma más fácil en mi opinión:
fuente