Я делаю пять контейнеров, каждый из которых содержит IconButton со значком звезды, я хочу, чтобы звезда меняла цвета при нажатии на нее, я использовал переменную color2
, которую я изначально назвал равной Colors.grey
какэто будет показано в коде.Однако проблема в том, что когда я нажимаю на одну из кнопок со значками, все звезды меняют свой цвет.вот код:
class _MyHomePageState extends State<MyHomePage> {
bool _star1;
Color color1 =Colors.grey;
Color color2=Colors.grey;
List<Meal> list1=[Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat: '20th of september 2018'),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'21th of september 2018'),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'22th of september 2018'),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'23th of september 2018'),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'24th of september 2018')];
change(){
setState(() {
if (color2==Colors.grey){
color2=Colors.yellow;
}
else {
color2=Colors.grey;
}
});
}
bool hi(String x){
if (x!='22th of september 2018'&&x!='20th of september 2018'&&x!='21th of september 2018'){
_star1 =true;
}
else{
_star1=false;
}
return _star1;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('listviewww'),),
body:
ListView( children:list1
.map((element){
return Column(
children: <Widget>[
Container(
child: Text(element.dat),),
Container(
margin: EdgeInsets.all(9.0),
constraints: new BoxConstraints.expand(height: 300.0),
decoration: new BoxDecoration(
border: new Border.all(color: Colors.blueAccent),
borderRadius: BorderRadius.horizontal( left:Radius.circular(30.0) ,right:Radius.circular(30.0) ),
image: new DecorationImage(image: new AssetImage('assets/food1.jpg'),fit: BoxFit.cover,),),
padding: EdgeInsets.only(bottom: 10.0),
child:Column(
children:<Widget>[
Row(children: <Widget>[
Container(
padding: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 80.0),
alignment: Alignment.topRight,
child:IconButton(
onPressed:(){ hi(element.dat)?null:change();},
icon:Icon(Icons.star),color:color2 ,)),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
alignment: Alignment.topCenter,
padding: const EdgeInsets.only(bottom: 1.0),
child: Text(
element.name,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 40.0),),),
Container(
margin: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 90.0),
child:Text(element.dis,style: TextStyle(color: Colors.grey[800],fontSize: 18.0),),),],), ),
Container(
padding: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 80.0),
alignment: Alignment.topLeft,
child:IconButton(
onPressed:null,
icon:Icon(Icons.done_all,color: hi(element.dat)?Colors.grey:Colors.lightBlue,)),),],),],))],);
}).toList()));}}
Редактировать Я добавил цвет в качестве элемента в классе следующим образом, но если я нажал на любую из кнопок, цвет не изменится:
List<Meal> list1=[Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat: '20th of september 2018',today:DateTime.now().subtract(Duration(days:2)),butcolor: Colors.grey),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'21th of september 2018',today:DateTime.now().subtract(Duration(days:1)),butcolor: Colors.grey),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'22th of september 2018',today:DateTime.now(),butcolor: Colors.grey),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'23th of september 2018',today: DateTime.now().add(Duration(days:1)),butcolor: Colors.grey),
Meal(dis:'it is a chicken sandwichh',name: 'chekin filla',dat:'24th of september 2018',today: DateTime.now().add(Duration(days:2)),butcolor: Colors.grey)];
switchcolor(Color x ){
setState(() {
if (x==Colors.yellow){
x=Colors.grey;
}
else{
x=Colors.yellow;
}
});
}
child:IconButton(
onPressed:(){ hi(element.today)?null:switchcolor(element.butcolor);},
icon:Icon(Icons.star),color:element.butcolor,)),
Есть идеи?Заранее спасибо.