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 onPresseden 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
buildsu botón, así como un widget con estado junto con alguna propiedad para eliminar.isButtonDisabled)onPressedvalor en ningunanullfunción o en algunaonPressed: () {}isButtonDisabledcomo parte de este condicional y devuelvanulluna 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 unnullcontrolador 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
TextyonPressed, 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 : () => _incrementCounterreturn () {}por lo que es intencional. No quiero usar la flecha gruesa aquí porque quiero que la función se ejecute y regresenully desactive el botón.disabledpropiedad, 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,disabledColoryDisabledTextColorno funcionará como se esperaba.La respuesta simple es
onPressed : nullun botón desactivado.fuente
Ajuste
y
fuente
onPressedes siempre una función, por lo que el botón se representa como 'seleccionable', aunque ignorará el evento de clic siisEnabledse establece la propiedad. Para deshabilitar realmente el botón, useRaisedButton(onPressed: isEnabled ? _handleClick : nullPara un número específico y limitado de widgets, envolverlos en un widget IgnorePointer hace exactamente esto: cuando su
ignoringpropiedad 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
onPressedpropiedad como se muestra a continuaciónonPressed : nulldevuelve el widget deshabilitadoonPressed : (){}oonPressed : _functionNamedevuelve 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