Ich fange gerade an, Flutter in den Griff zu bekommen, aber ich habe Probleme herauszufinden, wie ich den aktivierten Status einer Schaltfläche einstellen kann.
In den Dokumenten heißt es, onPressed
auf null zu setzen, um eine Schaltfläche zu deaktivieren, und ihr einen Wert zu geben, um sie zu aktivieren. Dies ist in Ordnung, wenn sich die Schaltfläche während des gesamten Lebenszyklus im selben Zustand befindet.
Ich habe den Eindruck, dass ich ein benutzerdefiniertes Stateful-Widget erstellen muss, mit dem ich den Aktivierungsstatus der Schaltfläche (oder den onPressed-Rückruf) irgendwie aktualisieren kann.
Meine Frage ist also, wie würde ich das machen? Dies scheint eine ziemlich einfache Anforderung zu sein, aber ich kann in den Dokumenten nichts dazu finden.
Vielen Dank.
Antworten:
Ich denke, Sie möchten vielleicht einige Hilfsfunktionen für
build
Ihre Schaltfläche sowie ein Stateful-Widget zusammen mit einer Eigenschaft zum Abschalten einführen .isButtonDisabled
)onPressed
Wert nicht direkt auf einenull
oder mehrere Funktionen einonPressed: () {}
isButtonDisabled
als Teil dieser Bedingung und geben Sie einenull
oder mehrere Funktionen zurück.setState(() => isButtonDisabled = true)
diese Option, um die bedingte Variable umzudrehen.build()
Methode mit dem neuen Status erneut auf und die Schaltfläche wird mit einemnull
Druckhandler gerendert und deaktiviert.Hier ist etwas mehr Kontext mit dem Flutter Counter-Projekt.
In diesem Beispiel verwende ich ein Inline-Ternär, um das
Text
und bedingt festzulegenonPressed
, aber es ist möglicherweise besser für Sie, dies in eine Funktion zu extrahieren (Sie können dieselbe Methode verwenden, um auch den Text der Schaltfläche zu ändern):quelle
onPressed: _isButtonDisabled ? null : () => _incrementCounter
return () {}
also ist dies beabsichtigt. Ich möchte den fetten Pfeil hier nicht verwenden, da die Funktionnull
die Schaltfläche ausführen und zurückgeben und deaktivieren soll.disabled
Immobilie, Flutter-Team? Dies ist einfach nicht intuitiv: - /Laut den Dokumenten:
"Wenn der onPressed-Rückruf null ist, wird die Schaltfläche deaktiviert und ähnelt standardmäßig einer flachen Schaltfläche in der deaktivierten Farbe."
https://docs.flutter.io/flutter/material/RaisedButton-class.html
Sie könnten also so etwas tun:
quelle
disabledElevation
,disabledColor
undDisabledTextColor
wird nicht funktionieren wie vorgesehen.Die einfache Antwort lautet:
onPressed : null
Deaktiviert.quelle
Rahmen
und
quelle
onPressed
immer eine Funktion, sodass die Schaltfläche als "anklickbar" gerendert wird, obwohl das Klickereignis ignoriert wird, wenn dieisEnabled
Eigenschaft festgelegt ist. Um die Schaltfläche wirklich zu deaktivieren, verwenden SieRaisedButton(onPressed: isEnabled ? _handleClick : null
Für eine bestimmte und begrenzte Anzahl von Widgets führt das Umschließen in ein Widget IgnorePointer genau dies aus: Wenn seine
ignoring
Eigenschaft auf true gesetzt ist, kann das Unter-Widget (eigentlich der gesamte Teilbaum) nicht angeklickt werden.Wenn Sie andernfalls einen gesamten Teilbaum deaktivieren möchten, schauen Sie in AbsorbPointer () nach.
quelle
Die Funktionen zum Aktivieren und Deaktivieren sind für die meisten Widgets gleich.
Ex, Taste, Schalter, Kontrollkästchen usw.
Stellen Sie einfach die
onPressed
Eigenschaft wie unten gezeigt einonPressed : null
Gibt das deaktivierte Widget zurückonPressed : (){}
oderonPressed : _functionName
gibt das aktivierte Widget zurückquelle
Sie können den AbsorbPointer auch auf folgende Weise verwenden:
Wenn Sie mehr über dieses Widget erfahren möchten, können Sie den folgenden Link Flutter Docs überprüfen
quelle
Dies ist meiner Meinung nach der einfachste Weg:
quelle