मुझे लगता है कि आप कुछ सहायक कार्यों को build
अपने बटन के साथ-साथ स्टेटफुल विजेट के साथ कुछ प्रॉपर्टी में बंद कर सकते हैं।
- StatefulWidget / State का उपयोग करें और अपनी स्थिति (जैसे
isButtonDisabled
) रखने के लिए एक वैरिएबल बनाएं
- इसे शुरू में सच में सेट करें (यदि आपकी यही इच्छा है)
- बटन रेंडर करते समय, सीधे
onPressed
null
या तो किसी फंक्शन का मान सेट न करेंonPressed: () {}
- इसके बजाय , यह सशर्त रूप से एक टर्नरी या एक सहायक कार्य (उदाहरण नीचे) का उपयोग करके सेट करता है
isButtonDisabled
इस सशर्त के भाग के रूप में जांचें और null
या तो या कुछ फ़ंक्शन पर लौटें ।
- जब बटन दबाया जाता है (या जब भी आप बटन को अक्षम करना चाहते हैं)
setState(() => isButtonDisabled = true)
सशर्त चर को फ्लिप करने के लिए उपयोग करते हैं।
- फ़्लटर
build()
नए राज्य के साथ फिर से विधि को बुलाएगा और बटन को एक null
प्रेस हैंडलर के साथ प्रदान किया जाएगा और अक्षम किया जाएगा।
फ़्लटर काउंटर परियोजना का उपयोग करते हुए यहां कुछ और संदर्भ दिए गए हैं।
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,
);
}
}
इस उदाहरण में मैं सशर्त को एक इनलाइन त्रिगुट उपयोग कर रहा हूँ सेट Text
और onPressed
, लेकिन यह आपको एक समारोह में इस निकालने के लिए के लिए अधिक उपयुक्त हो सकता है (आप बटन के पाठ के रूप में अच्छी तरह से बदलने के लिए इस एक ही विधि का उपयोग कर सकते हैं):
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();
};
}
}