Я использую пользовательское popupmenuitem внутри popupmenubutton, я хотел изменить цвет значка при нажатии, поэтому я использовал bools для идентификации. Проблема в том, что я использую setState для изменения значений, значение меняется, конечно, но пользовательский интерфейс (цвет) не меняется! Я не могу понять это. Я вставляю свой код здесь. Это все внутри панели приложения. Также я попытался использовать виджет строителя, но он не решил мою проблему.
actions: <Widget>[
PopupMenuButton(
tooltip: 'Filters',
padding: EdgeInsets.all(0),
icon: Icon(
Icons.filter_list,
color: Colors.black54,
),
itemBuilder: (BuildContext context) {
{
return <PopupMenuEntry>[
//locN
PopupItem(
child: GestureDetector(
onTap: () {
if(!_nearMe && !_specificLoc){
FilterList.selectedFilter.add(FilterList.nearMe);
print(FilterList.selectedFilter);
setState(() {
_nearMe = true;
});
}
else if (_specificLoc){
FilterList.selectedFilter.remove(FilterList.specificLoc);
FilterList.selectedFilter.add(FilterList.nearMe);
setState(() {
_specificLoc = false;
_nearMe = true;
});
print(FilterList.selectedFilter);
}
else{
setState(() {
_nearMe = false;
});
FilterList.selectedFilter.remove(FilterList.nearMe);
print(FilterList.selectedFilter);
}
},
child: ListTile(
leading: Icon(Icons.info_outline, color: _nearMe?Colors.green:Colors.black54,),
title: Text(FilterList.nearMe),
),
),
),
//loc
PopupItem(
child: GestureDetector(
onTap: () {
if(!_nearMe && !_specificLoc){
FilterList.selectedFilter.add(FilterList.specificLoc);
print(FilterList.selectedFilter);
setState(() {
_specificLoc = true;
});
}
else if (_nearMe){
FilterList.selectedFilter.remove(FilterList.nearMe);
FilterList.selectedFilter.add(FilterList.specificLoc);
setState(() {
_nearMe = false;
_specificLoc = true;
});
print(FilterList.selectedFilter);
}
else{
setState(() {
_specificLoc = false;
});
FilterList.selectedFilter.remove(FilterList.specificLoc);
print(FilterList.selectedFilter);
}
},
child: ListTile(
leading: Icon(Icons.info_outline, color: _specificLoc?Colors.green:Colors.black54,),
title: Text(FilterList.specificLoc),
),
),
),
bool _specificLo c и _nearMe используются для изменения цвета в листе.