我正在螢屏上渲染一個從api獲取的串列。我為串列中的每個專案設定了一個保存按鈕,點擊后會發生變化。它作業正常,但當我滾動串列時,它又恢復了。我認為這是因為串列生成器正在反復構建串列,但我想不出一個解決方案來修復用戶點擊時的圖示狀態。
....
class NewsListBuilderItemsState extends State < NewsListBuilderItems> {
final _repository = Repository();
bool selected = false;
...
而這里是按鈕:
GestureDetector(
孩子。Icon(selected
? Icons.bookmark
: Icons.bookmark_border_outlined)。)
onTap: () {
setState(() {
selected = !selected;
_repository.addToDb(
widget.snapshot.data[widget.index])。)
bloc.addToSavedNews(
widget.snapshot, widget.index);
});
},
)
uj5u.com熱心網友回復:
問題是,你只在專案層面處理 "選定 "狀態。因此,如果專案離開了可見區域,它就會自我毀滅,如果你向后滾動,它就會以初始狀態重新創建自己。你需要從專案的上方傳遞選中的資訊。最有可能的是,在你映射所有新聞的地方。你應該從資料庫(bloc)那里獲得選定的值,并將其作為引數傳遞給新聞專案。
uj5u.com熱心網友回復:
你有多個串列項,很明顯,你不能只用一個變數來管理這個狀態。你需要制作一個布林值的串列,串列的長度應該等于串列的長度。然后在setState中你應該改變該專案索引的布林值。
....
class NewsListBuilderItemsState extends State< NewsListBuilderItems> {
final _repository = Repository();
List<bool> selected = []。
...
注意:-
GestureDetector(
孩子。Icon(selected[index] ?
? Icons.bookmark
: Icons.bookmark_border_outlined)。)
onTap: () {
setState(() {
selected[index] = !selected[index];
_repository.addToDb(
widget.snapshot.data[widget.index])。)
bloc.addToSavedNews(
widget.snapshot, widget.index)。
});
},
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315722.html
標籤:

