Je commence tout juste à comprendre Flutter, mais j'ai du mal à comprendre comment définir l'état activé d'un bouton.
À partir de la documentation, il est indiqué de définir onPressed
sur null pour désactiver un bouton et de lui donner une valeur pour l'activer. Cela convient si le bouton continue à être dans le même état pendant le cycle de vie.
J'ai l'impression que j'ai besoin de créer un widget Stateful personnalisé qui me permettra de mettre à jour l'état activé du bouton (ou le rappel onPressed) d'une manière ou d'une autre.
Ma question est donc de savoir comment procéder? Cela semble être une exigence assez simple, mais je ne trouve rien dans la documentation sur la façon de le faire.
Merci.
Réponses:
Je pense que vous voudrez peut-être introduire des fonctions d'aide à
build
votre bouton ainsi qu'un widget Stateful avec une propriété à désactiver.isButtonDisabled
)onPressed
valeur sur l'unenull
ou l' autre fonctiononPressed: () {}
isButtonDisabled
dans le cadre de cette condition et retournez l'unenull
ou l' autre fonction.setState(() => isButtonDisabled = true)
pour inverser la variable conditionnelle.build()
nouveau la méthode avec le nouvel état et le bouton sera rendu avec unnull
gestionnaire de presse et sera désactivé.Voici un peu plus de contexte en utilisant le projet de compteur Flutter.
Dans cet exemple, j'utilise un ternaire en ligne pour définir conditionnellement le
Text
etonPressed
, mais il peut être plus approprié pour vous de l'extraire dans une fonction (vous pouvez également utiliser cette même méthode pour modifier le texte du bouton):la source
onPressed: _isButtonDisabled ? null : () => _incrementCounter
return () {}
donc c'est intentionnel. Je ne veux pas utiliser la grosse flèche ici car je veux que la fonction s'exécute et retournenull
et désactive le bouton.disabled
propriété, l'équipe Flutter? Ce n'est tout simplement pas intuitif: - /Selon la documentation:
«Si le rappel onPressed est nul, alors le bouton sera désactivé et ressemblera par défaut à un bouton plat dans le disabledColor.»
https://docs.flutter.io/flutter/material/RaisedButton-class.html
Donc, vous pouvez faire quelque chose comme ceci:
la source
disabledElevation
,disabledColor
etDisabledTextColor
ne fonctionnera pas comme prévu.La réponse simple est
onPressed : null
donne un bouton désactivé.la source
Réglage
et
la source
onPressed
est toujours une fonction, de sorte que le bouton est rendu comme "cliquable" bien qu'il ignorera l'événement de clic si laisEnabled
propriété est définie. Pour vraiment désactiver le bouton, utilisezRaisedButton(onPressed: isEnabled ? _handleClick : null
Pour un nombre spécifique et limité de widgets, les envelopper dans un widget IgnorePointer fait exactement ceci: lorsque sa
ignoring
propriété est définie sur true, le sous-widget (en fait, la sous-arborescence entière) n'est pas cliquable.Sinon, si vous avez l'intention de désactiver un sous-arbre entier, regardez dans AbsorbPointer ().
la source
Les fonctionnalités d'activation et de désactivation sont identiques pour la plupart des widgets.
Ex, bouton, interrupteur, case à cocher, etc.
Réglez simplement le
onPressed
propriété comme indiqué ci-dessousonPressed : null
renvoie le widget désactivéonPressed : (){}
ouonPressed : _functionName
renvoie le widget activéla source
Vous pouvez également utiliser AbsorbPointer et vous pouvez l'utiliser de la manière suivante:
Si vous souhaitez en savoir plus sur ce widget, vous pouvez consulter le lien suivant Flutter Docs
la source
C'est le moyen le plus simple à mon avis:
la source