簡體   English   中英

如何在 AlertDialog 關閉時刷新 Flutter UI?

[英]How to refresh flutter UI on AlertDialog close?

我正在研究某種時間跟蹤應用程序。 它背后的主要思想很簡單——為一個想要的項目添加小時數並顯示每天的小時數總和。

我為此使用 Flutter 和 dart,我有以下內容: - 每個工作日的卡片列表 - 卡片具有手勢檢測器點擊 - 此操作將顯示所選日期的所有項目 - AlertDialog 彈出窗口以添加小時數

我正在嘗試在警報對話框彈出關閉時刷新所選日期的總小時數,而無需重新加載所有數據。

有人可以幫助我了解如何實現刷新嗎?

到目前為止我嘗試過的內容如下:

  1. 我在導航到上一個屏幕之前更新數據上下文(傳遞的值)
  2. 我使用 StatefulWidget 為我的應用程序添加交互性
  3. 在返回上一個屏幕之前,我使用 setState 更改數據,但沒有成功。
  4. 我在谷歌上找到了多種方法來“刷新”用戶界面,但沒有任何成功
  5. 我嘗試使用 setState(),因為它可以完美地處理一些數據,但出現以下錯誤:“構建函數返回空值。”
  6. 我將 setState 添加為 ShowDialog 的一部分,但出現以下錯誤:“在構建期間調用了 setState() 或 markNeedsBuild()。” 所以我添加了額外的邏輯來檢查數據是否臟,但在一天結束時我得到了相同的結果。

為此所需的行為是單擊卡片並顯示所選日期的所有項目。 添加新值后,我想返回到同一個地方(使用打開的卡),新添加的項目將顯示在列表中,以及當天更新的總小時數。

現在,我已經部分完成了編輯。 我打開卡片並編輯現有項目之一。 數據已保存,但當我返回上一個屏幕時,我無法更新 UI 上的小時數。 當我再次打開編輯屏幕時,顯示的數據符合預期。

首先,您需要在Stateful Widget中調用您的showDialog以便訪問(顧名思義)狀態。 然后,在該屏幕中,您可以調用一個方法並顯示您的對話框,它將返回一個Future<void>這意味着您可以在對話框關閉后執行 so 操作,例如

showDialog(// Yours params).then((_)=>setState((){}));

並且您的 UI 將更新以匹配更改。

當想要刷新屏幕時,在彈出的導航器中從對話框中返回 true

FlatButton(
    onPressed: () {
        Navigator.of(context).pop(true);
      },
    child: Text("Close"))

結果為真時刷新屏幕

   final result = await showDialog<bool>(
      context: context,
      builder: (context) => MyDialog(),
    )
   if(result){// refresh screen}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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