簡體   English   中英

從另一個列表的值更新一個列表

[英]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() (不過,這取決於您的邏輯)。

多一點上下文你會幫助我給你一個更完整的答案,但這是我從你的代碼中可以看到的:

  1. 您的按鈕添加數據的次數與您按下的次數相同。 如果你按兩次,你遲早會得到“雙倍”的數據。 發生這種情況是因為您使用了add方法,該方法只是appends數據appends到您的列表中。 您可以在添加值之前使用pcBusy.clear()重置值,或者如果您認為此函數不應該覆蓋您的列表,則可以執行其他操作。 這真的取決於你的邏輯;
  2. 您正在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM