У меня есть несколько кнопок, которые мне нужно нажимать только на одну, а остальные должны изменить свой цвет,
, чтобы сделать код меньше, я извлек виджет, чтобы сделать его многоразовым, но когда явыберите кнопку, она получит измененный цвет, но не обновит состояние других кнопок.
Если я не извлекаю метод кнопки и не использую дубликат кода внутри строки, он работает.
Чего мне не хватает?
int numOfTime = 60;
class NumOfTime extends StatefulWidget {
const NumOfTime({
Key key,
}) : super(key: key);
@override
_NumOfTimeState createState() => _NumOfTimeState();
}
class _NumOfTimeState extends State<NumOfTime> {
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.only(left: 15, top: 5),
child: Text(
'Δευτερόλεπτα',
style: TextStyle(color: Colors.white),
)),
Container(
margin: EdgeInsets.only(top: 2, left: 10, right: 10, bottom: 10),
decoration: myBoxDecoration(),
child: Row(
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 10, right: 5),
child: Icon(Icons.timer)),
CustomButton(
number: 30,
),
CustomButton(
number: 45,
),
CustomButton(
number: 60,
),
CustomButton(
number: 75,
),
CustomButton(
number: 90,
),
Container(
padding: EdgeInsets.only(right: 10),
)
],
),
),
],
);
}
}
class CustomButton extends StatefulWidget {
final int number;
const CustomButton({
Key key,
final int number,
}) : this.number = number;
@override
_CustomButtonState createState() => _CustomButtonState(number);
}
class _CustomButtonState extends State<CustomButton> {
final int number;
_CustomButtonState(this.number);
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Expanded(
flex: 1,
child: FlatButton(
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(6.0)),
disabledColor: number == numOfTime ? Colors.black : Colors.white,
highlightColor: number == numOfTime ? Colors.black : Colors.white,
color: number == numOfTime ? Colors.black : Colors.white,
child: Text(
'$number',
style: TextStyle(
color: number == numOfTime ? Colors.white : Colors.black,
fontSize: 13),
),
onPressed: () {
numOfTime = number;
setState(() {});
}),
);
}
}
Я ожидаю увидетьвсе остальные кнопки меняют свой цвет на белый, если выбрана одна.
Я также пытался передать null onPressed, чтобы отключить его, но я не вижу никаких изменений.