您好,我正在做多項選擇。
List<ContactModel> contacts = [
ContactModel("Tüm ilanlar? g?ster", false),
ContactModel("En ?ok puan alan", false),
ContactModel("En ?ok teklif alan", false),
ContactModel("En az teklif alan", false),
ContactModel("Tarihe g?re (?nce en yeni ilan)", false),
ContactModel("Tarihe g?re (?nce en eski ilan)", false),
];
List<ContactModel> selectedContact = [];
這些是我的選擇選項。
pop() {
showDialog(
context: context,
builder: (context) {
Widget content = wici();
return StatefulBuilder(
builder: (context, SetState) {
return AlertDialog(
title: Text("Title of Dialog"),
content: content,
);
},
);
},
);
}
Widget wici() {
return Container(
height: 400,
width: 40,
child: ListView.builder(
itemCount: contacts.length,
itemBuilder: (BuildContext context, int index) {
return contactItem(
contacts[index].name, contacts[index].isSelected, index);
}),
);
}
Widget contactItem(String deger, bool isSelected, int index) {
return InkWell(
child: Container(
height: 40,
child: Text(deger),
color: isSelected ? purple : grey,
),
onTap: () {
setState(() {
contacts[index].isSelected = !contacts[index].isSelected;
if (contacts[index].isSelected == true) {
selectedContact.add(ContactModel(deger, true));
} else if (contacts[index].isSelected == false) {
selectedContact
.removeWhere((element) => element.name == contacts[index].name);
}
});
},
);
}
當我使用 pop() func 時。然后我選擇了一些選項,但沒有任何改變。要查看更改,我需要進行熱多載。如何更新警報對話框中的串列視圖。謝謝
uj5u.com熱心網友回復:
stateful 小部件的 setState 和 statefulbuilder 的 setState 在這里是 2 個不同的狀態設定器。解決此問題的一種方法是將 stateful builder 的狀態設定器傳遞給小部件并呼叫該方法,如下所示
pop() {
showDialog(
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text("Title of Dialog"),
content: wici(setState),
);
},
);
},
);
}
Widget wici(StateSetter setState) {
return Container(
height: 400,
width: 40,
child: ListView.builder(
itemCount: contacts.length,
itemBuilder: (BuildContext context, int index) {
return contactItem(
contacts[index].name, contacts[index].isSelected, index, setState);
}),
);
}
Widget contactItem(String deger, bool isSelected, int index, StateSetter setState) {
return InkWell(
child: Container(
height: 40,
child: Text(deger),
color: isSelected ? purple : grey,
),
onTap: () {
contacts[index].isSelected = !contacts[index].isSelected;
if (contacts[index].isSelected == true) {
selectedContact.add(ContactModel(deger, true));
} else if (contacts[index].isSelected == false) {
selectedContact
.removeWhere((element) => element.name == contacts[index].name);
}
setState((){});
},
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/508551.html
