我有一個ListView,其中包含我的客戶。這個ListView目前是一個無狀態的Widget。在對父類里面的客戶串列進行排序后,我需要重繪 該串列。
顯示串列的父級(父級是有狀態的):
父級是有狀態的
MyLieferListe(
bestellungen.anzahlPositionen,
bestellungen.kunde,
notifyParent: refresh,
),
MyLieferListe(目前是無狀態):
SingleChildScrollView(
孩子。ListView.builder(
shrinkWrap: true。
物理學。NeverScrollableScrollPhysics()。
itemBuilder。(context, index) {
return GestureDetector(
onTap: () {
getBeleg()。
this.notifyParent(kunden[index])。
},
孩子。MyBestellungText(
kunden[index].kundenbezeichnung,
kunden[index].kundenNr,
"${kunden[index].strasse}, ${kunden[index].plz} ${kunden[index].ort}"。
kunden[index].tourHinweis)。)
);
},
itemCount: kunden.length,
),
),
如何重繪 顯示在父類里面的子類的ListView?
uj5u.com熱心網友回復:
首先,你必須使你的串列有狀態,因為在改變串列的時候。你必須呼叫 setState。
一個糟糕的解決方案是使用Navigator.pushReplacement.
。一個好的解決方案是讓你的串列成為一個有狀態的小部件。
uj5u.com熱心網友回復:
在Flutter中,狀態的改變會觸發重建,所以為了確保你的widget在你對串列進行排序后重建,你應該呼叫setState
//a state variable。
List<Kunde> kunden;
onSortButtonClick() {
List<Kunde> newKunden = kunden.sort(..)。
//存盤到狀態。
setState((){
kunden = newKunden;
});
}
build(WidgetContext context) {
return ListView.builder(/* use kunden, from state, in here */)
}
正如你提到的,你的父類已經是有狀態的。你應該將bestellungen.kunde移到狀態變數中(首先在initState中設定它,并在每次改變它時使用setState),然后如果你通過setState更新kunden,它應該自動重建小部件。
另外,您可以使子部件具有狀態,并將 kunden 放在該部件的狀態中。從理論上講,這應該會稍微好一點,因為你只重建了子部件,而不是父部件,但實際上在這種情況下應該不會有太大的區別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315682.html
標籤:
