【发布时间】:2021-04-01 11:15:57
【问题描述】:
让我解释一下,我有两个 Items 的列表视图。目前我没有为这些项目提供 ID,但我有一个问题。事实上,当我从我的收藏列表中删除一个项目时,它不会更改主屏幕上正确项目的图标(收藏或不收藏)。
我想在菜单屏幕中获取项目的位置,以便更改收藏夹列表中的图标。我正在使用provider package。
所以我想知道为每个项目创建一个id 并存储一个List<int> 然后在我的收藏夹列表中创建一个List<Item> 会不会更好。另外,我可以用这个id来改变右边的图标。
但我不知道如何使用这些id创建一个List然后更改右边的图标。
黑色心 = 喜欢,白色心 = 不喜欢。 删除的是错误的项目。
My code 在 Github 上以及我的代码的一些相关部分:
favModel.dart
class FavModel extends ChangeNotifier {
List<Item> favList = [];
List<bool> isInFav = [];
addInFavorite(title, description, index){
Item item = Item(title: title, description: description, );
favList.add(item);
isInFav[index] = true;
notifyListeners();
}
removeOfFavorite(int index, int index2){
favList.removeAt(index);
isInFav[index2] = false;
notifyListeners();
}
implement(){
isInFav.add(false);
}
}
favorite_screen.dart
class Favorite extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Favorite'),
),
body: Consumer<FavModel>(
builder: (context, favModel, child) {
return ListView.builder(
itemCount: favModel.favList.length,
itemBuilder: (context, index) {
return TextObject(favModel.favList[index].title,
favModel.favList[index].description),
Padding(
padding: const EdgeInsets.all(7.0),
child: GestureDetector(
child: Icon(
Icons.favorite,
color: Colors.red,
size: 32,
),
onTap: () {
favModel.removeOfFavorite(index, index);
}),
),
});
},
),
);
}
}
home_screen.dart
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
actions: [
IconButton(
icon: Icon(Icons.favorite_border),
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
fullscreenDialog: true,
builder: (context) {
return Favorite();
},
),
),
),
],
),
body: Consumer<FavModel>(builder: (context, favModel, child) {
return ListView.builder(
shrinkWrap: false,
itemCount: itemData.length,
itemBuilder: (context, index) {
favModel.implement();
return TextObject(
itemData[index].title, itemData[index].description),
Padding(
padding: const EdgeInsets.all(7.0),
child: GestureDetector(
child: Icon(
favModel.isInFav.elementAt(index)
? Icons.favorite
: Icons.favorite_border,
color:
favModel.isInFav[index] ? Colors.red : null,
size: 32,
),
onTap: () {
favModel.isInFav[index]
? null
: Provider.of<FavModel>(context,
listen: false)
.addInFavorite(
itemData[index].title,
itemData[index].description,
index,
);
}),
);
});
}),
);
}
}
我想要获取索引的位置在 favourite_screen.dart 这一行favModel.removeOfFavorite(index, index);
【问题讨论】:
-
我想在两个不同的屏幕上显示两个列表。在第一个屏幕中,您可以添加项目,在第二个屏幕中您可以删除它们。我可以这样做,但我想设法在第一个屏幕中将正确的图标更改为正确的项目。