我有以下用戶定義的物件 -
class PhoneBookContact {
String? phoneBookContact;
List<ContactNumber>? contactNumbers;
PhoneBookContact(this.phoneBookContact, this.contactNumbers);
}
class ContactNumber {
String phone;
bool availableOnBol;
ContactNumber(this.phone, this.availableOnBol);
}
在我的主要方法中,我正在為 ContactNumber 類創建一個串列,然后將該 ContactNumber 串列添加到 PhoneBookContact 串列的 contactNumbers 屬性中。這都是在 for 回圈中完成的。
我遇到的問題是,當我在將這些專案添加到 PhoneBookContact 串列的 contactNumbers 屬性后清除 contactNumbers 串列時,我看到那些也從 PhoneBookContact 串列中清除,我覺得這很奇怪,或者我不認為它是正確的方法。
List<PhoneBookContact> phoneBookContacts = [];
List<ContactNumber> contactNumbers = [];
for (var contact in contacts) {
contactNumbers.clear();
if (contact.phones.isNotEmpty) {
for (var phone in contact.phones) {
if (true) {
contactNumbers.add(ContactNumber(phone.number, true));
} else {
contactNumbers.add(ContactNumber(phone.number, false));
}
}
}
phoneBookContacts
.add(PhoneBookContact(contact.displayName, contactNumbers));
}
uj5u.com熱心網友回復:
您的 PhoneBookContact 建構式不會復制串列。它需要對串列的參考并記住它。
由于您在每個回圈中清除串列但重用相同的串列實體,因此您所有的 PhoneBookContacts 都將具有相同的串列。
讓我們稍微清理一下您的方法:
List<PhoneBookContact> phoneBookContacts = [];
for (var contact in contacts) {
List<ContactNumber> contactNumbers = [];
for (var phone in contact.phones) {
final condition = true; // should be your complicated expression
contactNumbers.add(ContactNumber(phone.number, condition));
}
phoneBookContacts.add(PhoneBookContact(contact.displayName, contactNumbers));
}
除了消除一些混亂之外,它還確保在每個回圈中實體化一個新串列,以便每個 PhoneBookContact都有自己的串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/469460.html
下一篇:引數型別“List<DropdownMenuItem<String>>”不能分配給引數型別“List<String>”
