#android #ios #flutter #dart #gesturedetector
#Android #iOS #flutter #dart #gesturedetector
Вопрос:
У меня есть список строк, и я хочу изменить цвет при нажатии на одну из них, вот мой код на данный момент :
var list = ["name", "city", "country", "email"];
appBar: AppBar(
title:Row(
mainAxisAlignment: MainAxisAlignment.end,
children: List.generate(4, (index) {
return GestureDetector(
child: Container(
margin: EdgeInsets.all(8),
child: Text(
list[index],
style: TextStyle(color: Colors.red),
),
),
onTap: () {},
);
}),
),
),
Комментарии:
1. Ваш вопрос совершенно неясен. Не могли бы вы, пожалуйста, сказать, используете ли вы виджет с отслеживанием состояния или виджет без состояния?
2. виджет с отслеживанием состояния
Ответ №1:
Учитывая, что это виджет с отслеживанием состояния, вы можете сделать это следующим образом:
var list = ["name", "city", "country", "email"];
List <int>tapped = [];
appBar: AppBar(
title:Row(
mainAxisAlignment: MainAxisAlignment.end,
children: List.generate(4, (index) {
return GestureDetector(
child: Container(
margin: EdgeInsets.all(8),
child: Text(
list[index],
style: TextStyle(color: tapped.contains(index) ? Colors.red : Colors.black),
),
),
onTap: () {
if(tapped.contains(index)){
this.setState(() {tapped.remove(index);});
} else {
this.setState(() {tapped.add(index);});
}
},
);
}),
),
),
Комментарии:
1. Это то, что я сделал, и это работает для меня, добавьте переменную int SelectedIndex; затем int TextStyle(цвет : SelectedIndex == индекс ? Цвета.красный : Colors.blue и setState ((){ SelectedIndex = index; })
2. Да. Я думал, что цвета выбранных текстов должны оставаться выбранными до тех пор, пока они не будут отменены. Но если вы хотите, чтобы они автоматически отменялись, если выбран другой цвет, тогда все в порядке! Это просто вопрос того, чего вы хотите. Поскольку это не было упомянуто в вопросе, я сделал то, что, по-видимому, вы хотели.