Проблема в том, что вы используете нажатую переменную во всех переменных, поэтому, когда вы меняете значение нажатого значения, вся кнопка меняет свой цвет.
Вы можете создать список, содержащий нажатое значение для каждой кнопки .
List<bool> pressed = [false, false, false, false];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
BuildButton("XXS", 0),
BuildButton("XS", 1),
BuildButton("S", 2),
BuildButton("M", 3),
],
),
],
),
),
);
}
Widget BuildButton(String buttonText, int index) {
return new Expanded(
child: new FlatButton(
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(
15.0,
),
side: BorderSide(color: Colors.black)),
color: pressed[index]
? Colors.grey
: Colors.white, // colour change when clicked
textColor: Colors.black,
padding: EdgeInsets.all(6.0),
child: new Text(buttonText),
onPressed: () {
setState(() {
pressed[index] = !pressed[index];
});
},
),
);
}