Кажется, я не могу переключить значок избранного, когда пользователь нажимает его, и я не могу правильно передать идентификатор элемента, что я делаю не так? Вот мой код, и, пожалуйста, не говорите мне использовать провайдера: (
main:
void toggleFavs(String itemId) {
int _selectedIndex =
favorites.indexWhere((element) => element.id == itemId);
print('$_selectedIndex in main');
if (_selectedIndex >= 0) {
favorites.removeAt(_selectedIndex);
} else {
print('$_selectedIndex in main after gu');
favorites.add(DUMMY_TAMATA.firstWhere((element) => element.id == itemId));
}
}
bool isFavorite(String itemId) {
setState(() {
return favorites.any((element) => element.id == itemId);
});
}
initialRoute: '/',
routes: {
'/': (ctx) => TabsScreen(toggleFavs, isFavorite, favorites)
tabs:
final List<Tamata> favoriteList;
final Function toggleFav;
final Function isFav;
TabsScreen(this.toggleFav, this.isFav, this.favoriteList);
OffersPage(
searchedString: searchedText,
displayFav: widget.toggleFav,
isFav: widget.isFav,
)
Предлагает страницу, я делаю то же самое и создаю MyItem и передаю его MyItem вместе с его идентификатором.
страница смещения:
SliverGrid(
delegate: SliverChildBuilderDelegate(
(context, index) {
retur MyItem(
icon: availableVeggies[index].icon,
imageUrl: availableVeggies[index].imageUrl,
label: availableVeggies[index].title,
price: availableVeggies[index].price,
id: availableVeggies[index].id,
displayFavorites: displayFav,
isFavorite: isFav,
);
},
childCount:
SSE.isEmpty ? availableVeggies.length : SSE.keys.length,
),
MyItem.
IconButton(
onPressed: () {
print(widget.label);
print(widget.id);
widget.displayFavorites(widget.id);
},
icon: Icon(
widget.displayFavorites(widget.id) == true
? Icons.favorite
: Icons.favorite_border,
size: 25.0,
color: Colors.orange[800],
),
),