Sanırım builddüğmenize bazı yardımcı işlevler ve ayrıca bir Durum bilgisi bileşeninin yanı sıra tuşunu kapatabileceğiniz bazı özellikler eklemek isteyebilirsiniz.
- Bir StatefulWidget / State kullanın ve koşulunuzu tutmak için bir değişken oluşturun (ör.
isButtonDisabled)
- Bunu başlangıçta doğru olarak ayarlayın (eğer arzuladığınız şey buysa)
- Düğmeyi oluştururken, değeri doğrudan
onPressednull işlevlerden birine veya bir işlevine ayarlamayınonPressed: () {}
- Bunun yerine , üçlü veya yardımcı bir işlev kullanarak koşullu olarak ayarlayın (aşağıdaki örnek)
- Koşulunun bir
isButtonDisabledparçası olarak kontrol edin ve nullişlevlerden birini veya bir kısmını geri döndürün .
- Düğmeye basıldığında (veya düğmeyi devre dışı bırakmak istediğinizde)
setState(() => isButtonDisabled = true)koşullu değişkeni çevirmek için kullanın .
- Flutter
build(), yeni durumla yöntemi tekrar çağıracak ve düğme bir nullbasın işleyici ile işlenecek ve devre dışı bırakılacaktır.
İşte Flutter sayaç projesini kullanarak biraz daha bağlam.
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
bool _isButtonDisabled;
@override
void initState() {
_isButtonDisabled = false;
}
void _incrementCounter() {
setState(() {
_isButtonDisabled = true;
_counter++;
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("The App"),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text(
'You have pushed the button this many times:',
),
new Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
_buildCounterButton(),
],
),
),
);
}
Widget _buildCounterButton() {
return new RaisedButton(
child: new Text(
_isButtonDisabled ? "Hold on..." : "Increment"
),
onPressed: _isButtonDisabled ? null : _incrementCounter,
);
}
}
Bu örnekte ben set şartlı bir satır içi ve üçlü kullanıyorum Textve onPressed, ama bir fonksiyonun içine bu ayıklamak için daha uygun olabilir (eğer düğmeye metnini de değiştirmek için bu aynı yöntemi kullanabilirsiniz):
Widget _buildCounterButton() {
return new RaisedButton(
child: new Text(
_isButtonDisabled ? "Hold on..." : "Increment"
),
onPressed: _counterButtonPress(),
);
}
Function _counterButtonPress() {
if (_isButtonDisabled) {
return null;
} else {
return () {
// do anything else you may want to here
_incrementCounter();
};
}
}