我有這個代碼我需要只選擇一個選項,從三個按鈕“每月,每季度和每年”以及選擇一個,阻止另外兩個。
我已經搜索過,但我只找到了如何阻止我剛剛選擇的按鈕,我需要阻止那些沒有被選中的按鈕。
這些是我用來在選擇時改變顏色的變數。
bool pressMensual = false;
bool pressTrimes = false;
bool pressAnual = false;
bool _isPressed = false;
Container(
padding: EdgeInsets.symmetric(horizontal: 2.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 10.0, right: 10.0),
child: Column(
children: [
Text('PERIODO'),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(3.0),
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)
),
child: Text('MENSUAL'),
color: pressMensual ? Colors.blue[100] : Color(0xFF94D500),
onPressed: () {
_isPressed = true;
setState(() {
pressMensual = !pressMensual;
});
},
),
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)
),
color: pressTrimes ? Colors.blue[100] : Color(0xFF94D500),
child: Text('TRIMESTRAL'),
onPressed: () {
setState(() {
pressTrimes = !pressTrimes;
});
},
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)
),
color: pressAnual ? Colors.blue[100] : Color(0xFF94D500),
child: Text('ANUAL'),
onPressed: () {
setState(() {
pressAnual = !pressAnual;
});
},
),
],
),
],
),
);
uj5u.com熱心網友回復:
嘗試這種方式,而其他兩個將是錯誤的。我們喜歡在按下的按鈕上設定 true 并使其他按鈕為 false。為了存檔,我們需要更新里面的三個值setState來更新 UI。
setState(() {
pressMensual = true; // because `Mensual` is pressed here
pressTrimes = false;
pressAnual = false;
});
鎖定印刷機 功能
在這里我們可以通過null防止RaisedButtonlike的 tap-event onPressed:null。在這種情況下,我們需要像您一樣包含另一個變數,或者您可以檢查這三個bool變數。
使用_isPressedbool 將是
onPressed: _isPressed
? null
: () {
setState(() {
pressMensual = false;
pressTrimes = true;
pressAnual = false;
_isPressed = true;
});
},
或者你可以喜歡并避免使用另一個布林值。
onPressed: pressMensual || pressTrimes || pressAnual
? null
: () {
setState(() {
pressMensual = false;
pressTrimes = true;
pressAnual = false;
});
},
null在這種情況下使用will/can 失去您的樣式功能,而不是傳遞 null 來onPressed傳遞空函式,例如
onPressed: _isPressed
? () {}
: () {
setState(() {
pressMensual = false;
pressTrimes = false;
pressAnual = true;
_isPressed = true;
});
},
完整的小工具
class _TestWState extends State<STD> {
bool pressMensual = false;
bool pressTrimes = false;
bool pressAnual = false;
bool _isPressed = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
padding: EdgeInsets.symmetric(horizontal: 2.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 10.0, right: 10.0),
child: Column(
children: [
Text('PERIODO'),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(3.0),
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
child: Text('MENSUAL'),
color: pressMensual
? Colors.blue[100]
: Color(0xFF94D500),
onPressed: _isPressed
? null //* will loss style
: () {
setState(() {
pressMensual = true;
pressTrimes = false;
pressAnual = false;
_isPressed = true;
});
},
),
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
color:
pressTrimes ? Colors.blue[100] : Color(0xFF94D500),
child: Text('TRIMESTRAL'),
onPressed: pressMensual || pressTrimes || pressAnual //* without using separate variable
? () {}
: () {
setState(() {
pressMensual = false;
pressTrimes = true;
pressAnual = false;
_isPressed = true;
});
},
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
color:
pressAnual ? Colors.blue[100] : Color(0xFF94D500),
child: Text('ANUAL'),
onPressed: _isPressed
? () {}
: () {
setState(() {
pressMensual = false;
pressTrimes = false;
pressAnual = true;
_isPressed = true;
});
},
),
],
),
],
),
)
],
),
),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/335007.html
