我有一個專案的 ListView,其中每個 ListTile 代表一個專案。為此,我有一個使用 for 回圈寫入 ListView 的專案串列。每個 ListTile 都有一個 IconButton,用于將專案定義為收藏項。為了保持代碼干凈,我在專案類中定義了方法來構建 UI。這背后的原因是該專案可以從應用程式的不同位置設定為收藏夾。
不幸的是,我無法讓應用程式根據最喜歡的狀態更新 UI。我想這與 Widget 的回傳有關,因為狀態在回傳時被評估一次,并且在重繪 之前不會改變。我已經使用 ChangeNotifier 擴展了 Project 類,但沒有任何結果。在代碼下方。
ListView(
children: [
for (var project in projects.projects) project.getListTile()
],
),
帶有 getListTile Method() 的專案類:
class Project extends ChangeNotifier{
bool favorite = false;
Project({this.favorite = false});
IconButton getFavoriteButton() {
return IconButton(
icon: favorite
? Icon(Icons.favorite_outlined)
: Icon(Icons.favorite_border_outlined),
color: favorite ? Colors.yellow : Colors.white,
onPressed: () {
favorite = !favorite;
notifyListeners();
},
);
}
ListTile getListTile() {
return ListTile(
leading: getFavoriteButton(),
),
);
}
}
有沒有辦法重繪 UI,以便在按下 IconButton 時更新最喜歡的圖示型別和顏色?
uj5u.com熱心網友回復:
您應該使用 StatefullWidget 實作。
這些小部件用于存盤狀態并在您執行以下操作時在任何狀態更改時自動重建:
IconButton(
icon: favorite
? Icon(Icons.favorite_outlined)
: Icon(Icons.favorite_border_outlined),
color: favorite ? Colors.yellow : Colors.white,
onPressed: () {
setState((){
favorite = !favorite;
}
},
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/362918.html
