[英]Update one List from values another List
我編寫了獲取 Json 數據並放入 listPc 的代碼。 並編寫了將值 'hostName' 從 listPc 添加到 pcBusy List 的循環。 但是我的代碼只將值添加到第二個列表,如果我在 pcBusy 列表中按 GetButton 值重復。 我需要更新 pcBusy 列表,而不僅僅是添加相同的值。
如果我按兩次按鈕,則會打印此打印:
[S14, S18, S19, S12, S02, V08, S01, O09, S14, S18, S19, S12, S02, V08, S01, O09]
感謝幫助!)
void fetchDataStandart() async {
final urlAuth =
Uri.parse('http://XXX.XX.XXX.XXX/api/usersessions/activeinfo');
final response = await http
.get(urlAuth, headers: <String, String>{'authorization': basicAuth});
if (response.statusCode == 200) {
List listPc = List.from(json.decode(response.body)['result']);
for (int i = 0; i < listPc.length; i++) {
pcBusy.add(listPc[i]['hostName']);
}
print(pcBusy);
} else {
throw Exception('Ошибка получения данных');
}
}
TLDR :添加Future<void>
作為您的函數返回類型,並考慮在用新數據覆蓋之前調用pcBusy.clear()
(不過,這取決於您的邏輯)。
多一點上下文你會幫助我給你一個更完整的答案,但這是我從你的代碼中可以看到的:
add
方法,該方法只是appends
數據appends
到您的列表中。 您可以在添加值之前使用pcBusy.clear()
重置值,或者如果您認為此函數不應該覆蓋您的列表,則可以執行其他操作。 這真的取決於你的邏輯;awaiting
Future(通過async
關鍵字),但您的函數不返回 Future。 這意味着 - 很可能 - 在其他地方你正在等待這個實際上不需要等待的功能。 因此,這意味着當您第一次按下按鈕時,即您觸發未來,您不能等待它發生並且您的 UI 不會更新。 第二次,它確實使用先前的結果更新您的 UI,並再次觸發 Future,讓它再次使用兩倍的值更新您的列表,如步驟 (1) 中所述。希望這可以幫助。 編輯。 這是一些編輯過的代碼:
// we want this function to be awaited: let it be a Future<void> async function
Future<void> fetchDataStandart() async {
// ... firing an async HTTP request
if (response.statusCode == 200) {
// if everything is OK, decode the JSON
List listPc = List.from(json.decode(response.body)['result']);
// the following will OVERWRITE the list.
pcBusy.clear(); // Or maybe save previous data somewhere else?
for (int i = 0; i < listPc.length; i++) {
pcBusy.add(listPc[i]['hostName']);
}
print(pcBusy);
} else {
throw Exception('Ошибка получения данных');
}
}
要刪除重復項,您可以將列表轉換為集合,然后再次返回列表。
pcBusy.toSet().toList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.