我有一個專案串列,每個專案都有一種顏色,當串列通過 15 個專案時,螢屏外專案的顏色會發生變化。我試過 ListView.builder 和 ListView.custom ,結果是一樣的。
這是我用于串列的代碼:
ListView.builder(
itemBuilder: (ctx, index) {
return NoteItem(
key: ValueKey(notes[index].id),
note: notes[index],
deleteNote: deleteNote,
);
},
itemCount: notes.length,
findChildIndexCallback: (Key key) {
final ValueKey valueKey = key;
final String data = valueKey.value;
final index = notes.indexWhere((nt) => nt.id == data);
return index >= 0 ? index : null;
},
),
滾動之前(示例)
滾動后(示例)
另外,有什么辦法可以不與串列中添加的最后一項顏色相同?我試圖將 .toSet().toList() 添加到我的顏色串列中。但它仍然會在某個時候連續生成 2 個相同顏色的顏色。
這是我的顏色串列:
Color _bgColor;
@override
void initState() {
const availableColors = [
Color.fromARGB(255, 170, 171, 168),
Color.fromARGB(255, 188, 122, 119),
Color.fromARGB(255, 205, 155, 157),
Color.fromARGB(255, 219, 199, 201),
Color.fromARGB(255, 136, 167, 149),
Color.fromARGB(255, 230, 192, 181),
Color.fromARGB(255, 184, 208, 228),
];
_bgColor = availableColors[Random().nextInt(7)];
super.initState();
}
你能幫我嗎?
我是新手,我正在嘗試應用我到目前為止所學的知識,所以如果問題很愚蠢,我很抱歉:) 也為我的英語不好感到抱歉。
提前致謝。
uj5u.com熱心網友回復:
我建議將索引傳遞給 NoteItem,例如這樣
return NoteItem(
key: ValueKey(notes[index].id)
note: notes[index],
deleteNote: deleteNote,
index: index
);
然后改變
_bgColor = availableColors[Random().nextInt(7)];
至
_bgColor = availableColors[widget.index % 7];
那時它不再是隨機的了,但至少是一致的,并且彼此之間沒有重復的顏色
uj5u.com熱心網友回復:
檢查當前顏色是否等于先前顏色,然后再次選擇顏色。如果你不能暗示然后告訴我我會幫助你。
uj5u.com熱心網友回復:
不要生成隨機顏色。只需將索引也傳遞給您的 NoteItem 類并設定您的索引,您的顏色將按順序進行選擇。
顏色_bgColor; 靜態 int 索引 = 0;
@覆寫
無效初始化狀態(){
const availableColors = [
Color.fromARGB(255, 170, 171, 168),
Color.fromARGB(255, 188, 122, 119),
Color.fromARGB(255, 205, 155, 157),
Color.fromARGB(255, 219, 199, 201),
Color.fromARGB(255, 136, 167, 149),
Color.fromARGB(255, 230, 192, 181),
Color.fromARGB(255, 184, 208, 228),
];
_bgColor = availableColors[index % 7];
super.initState();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/506384.html