Saya pikir Anda mungkin ingin memperkenalkan beberapa fungsi pembantu ke buildtombol Anda serta widget Stateful bersama dengan beberapa properti untuk dimatikan.
- Gunakan StatefulWidget / State dan buat variabel untuk menampung kondisi Anda (misalnya
isButtonDisabled)
- Setel ini menjadi benar pada awalnya (jika itu yang Anda inginkan)
- Saat merender tombol, jangan langsung menyetel
onPressed nilainya ke salah satu nullatau beberapa fungsionPressed: () {}
- Sebaliknya , setel secara kondisional menggunakan terner atau fungsi pembantu (contoh di bawah)
- Periksa
isButtonDisabledsebagai bagian dari kondisional ini dan kembalikan salah satu nullatau beberapa fungsi.
- Saat tombol ditekan (atau kapan pun Anda ingin menonaktifkan tombol) gunakan
setState(() => isButtonDisabled = true)untuk membalik variabel bersyarat.
- Flutter akan memanggil
build()metode lagi dengan status baru dan tombol akan ditampilkan dengan nullpenangan pers dan dinonaktifkan.
Berikut adalah beberapa konteks lainnya menggunakan proyek penghitung Flutter.
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,
);
}
}
Dalam contoh ini saya menggunakan terner sebaris untuk mengatur Textdan secara kondisional onPressed, tetapi mungkin lebih sesuai bagi Anda untuk mengekstrak ini ke dalam fungsi (Anda dapat menggunakan metode yang sama ini untuk mengubah teks tombol juga):
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();
};
}
}