#flutter #dart
#flutter #dart
Вопрос:
у меня появляется кнопка избранного в представлении списка, когда я нажимаю на нее и выбираю все элементы в списке, как я могу это исправить используя общие предпочтения, вот мой код: в моем состоянии stfl :
static const likedKey = 'liked_key';
bool liked;
@override
void initState() {
super.initState();
_restorePersistedPreference();
}
void _restorePersistedPreference() async {
var preferences = await SharedPreferences.getInstance();
var liked = preferences.getBool(likedKey) ?? false;
setState(() => this.liked = liked);
}
void _persistPreference() async {
setState(() => liked = !liked);
var preferences = await SharedPreferences.getInstance();
preferences.setBool(likedKey, liked);
}
Мой код LikeButton:
IconButton(
icon: Icon(
liked ? Icons.favorite : Icons.favorite_border,
color: liked ? Colors.red : Colors.grey,
),
onPressed: _persistPreference,
),
Комментарии:
1. пожалуйста, объясните вашу проблему намного яснее и с более подробной информацией. Никто не понимает вашу проблему
2. У меня есть listview, как сообщения, в порядке? у каждого сообщения есть кнопка = нравится. когда пользователь нажимает кнопку «Нравится», он меняет все записи на «Понравилось»! очистить?
3. Теперь я понимаю это. Это потому, что у всех них есть общая переменная с именем like. Поэтому, когда вы измените значение «понравилось» на true, все они будут «понравились».
4. Да, точно, могу я оставить вам dm?
5. Я опубликовал ответ @Ramzi. Вам нужно сгенерировать список<bool>, а затем изменить каждое отдельное значение, если пользователь нажмет на кнопку.
Ответ №1:
Вы можете решить свою проблему, сгенерировав List<bool>
. Поскольку нажатие кнопки IconButton изменит значение параметра liked, все ваши значки станут Icons.favorite, потому что все они ссылаются на один и тот же bool, который вам понравился. Вот пример того, как вы можете это исправить:
@override
Widget build(BuildContext context) {
List<bool> likedList=[];
List<bool>.generate(yourItem.length, (i) => likedList.add(false);
return ListView.builder(
itemcount:yourItem.length,
itemBuilder:(BuildContext context,int index){
return IconButton(
icon: Icon(
likedList[index] ? Icons.favorite : Icons.favorite_border,
color: likedList[index] ? Colors.red : Colors.grey,
),
onPressed:()=> likedList[index]=!likedList[index], //toggle bool value
);
}
)