Если я не ошибаюсь, то, что вы пытаетесь сделать, уже обрабатывается флаттером. Я думаю, что все, что вам нужно сделать, это установить hightlightColor
кнопки, и когда она будет нажата, она изменит цвет на этот. И вы можете установить это в тему для всего вашего приложения, чтобы все кнопки работали одинаково, а не настраивать ее для каждой отдельной кнопки.
Однако есть и причина, по которой вы не работаете. Вы не включили достаточно кода, чтобы я мог сказать, но я считаю, что причина того, что вы делаете, не работает, в том, что у вас есть список данных, которые вы изменяете при нажатии кнопки (т.е. zones[i].isSelected = false;
). Вы делаете это в setState, но способ, которым этот флаттер проверяет, нуждается ли что-то в восстановлении, - это сравнение на равенство между членами государства (то есть он будет проверять, есть ли зоны == зоны).
Поскольку 'zone' - это просто список и фактически тот же список для старого и нового состояния, flutter будет предполагать, что ничего не изменилось, и не будет беспокоить восстановление.
Есть два простых способа обойти это. Можно было бы сделать копию списка каждый раз, когда он изменяется, и установить для него элемент zones
, чтобы при флаттере выполнялось сравнение old.zones != new.zones
. Другой способ - сохранить отдельный объект, который вы изменяете при каждом изменении списка (я обычно использую целое число с именем changeCounter, которое я увеличиваю при каждом изменении списка), так как вы можете «обмануть» трепетание при перестройке.