【发布时间】:2020-03-14 03:21:11
【问题描述】:
我看到很多人有非常相似的问题,但我尝试的任何方法都不起作用。
上下文
我有一个收藏的想法列表。每当我单击ideaItem 内的按钮时,它都会从列表中删除。
问题
当我删除任何ideaItem 时,屏幕上的最后一个总是被删除,而不是我点击的那个。我的 FavoriteIdeasListView 似乎正确更新了项目数,这意味着附加的列表有效,但 UI 没有重绘 ideaItems。
我已经尝试过什么
一开始我直接在ideaItem 上有删除功能,我读到我应该做一个VoidCallback 并处理从列表本身删除,所以它会注意到变化。没用
我也尝试过使用 Stream Builder,因此流会通知 ListView 刷新。也没用
我尝试一直调用 SetState 并且它没有重新加载,它只是在 initialState 的开头构建列表。
class FavoritesList extends StatefulWidget {
FavoritesList({Key key}) : super(key: key);
@override
_FavoritesListState createState() => _FavoritesListState();
}
class _FavoritesListState extends State<FavoritesList> {
List<Idea> _favorites = [];
@override
void initState() {
super.initState();
favoritesInitialState();
}
Future <void> favoritesInitialState() async {
List<Idea> ideas = await IdeasDB.db.ideas();
setState(() {
_favorites = ideas;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Favorites')),
body: Center(
child: ListView.builder(
itemCount: _favorites.length,
itemBuilder: (context, index) {
final idea = _favorites[index];
return IdeaItem(
idea: idea,
onFavoriteToggle: () => deleteFromFavorites(idea),
);
},
),
)
);
}
void deleteFromFavorites(Idea idea) async {
await IdeasDB.db.deleteIdea(idea.url);
List<Idea> newIdeas = await IdeasDB.db.ideas();
setState(() {
this._favorites = newIdeas;
});
}
}
【问题讨论】:
标签: listview flutter dart reactive-programming