如何在AlertDialog关闭时刷新Flutter UI?

时间:2018-12-21 10:18:12

标签: dart flutter

我正在开发某种时间跟踪应用程序。它背后的主要理想很简单-添加所需项目的小时数并显示每天的小时数。

我为此使用Flutter和dart,并且具有以下内容: -每个星期的卡片清单 -卡上已实现手势检测器点击-此操作将显示所选日期的所有项目 -AlertDialog弹出窗口添加小时数

我正在尝试在“警报对话框”弹出窗口关闭时刷新所选日期的总小时数,而不重新加载所有数据。

有人可以帮我实现刷新的任何想法吗?

到目前为止,我尝试过以下操作:

  1. 在导航到上一个屏幕之前,我会更新数据上下文(传递的值)
  2. 我使用StatefulWidget来向我的应用添加交互性
  3. 我使用setState更改数据,然后返回上一屏幕,但未成功。
  4. 我在Google上找到了多种方法来“刷新” UI,但没有成功
  5. 我尝试使用setState(),因为它可以完美地处理某些数据,并且出现以下错误:“构建函数返回null。”
  6. 我将setState添加为ShowDialog的一部分,但出现以下错误:“在构建期间调用了setState()或markNeedsBuild()。”因此我添加了其他逻辑来检查数据是否脏了,但一天结束时我得到了相同的结果。

为此,所需的行为是单击卡并显示所选日期的所有项目。添加新值后,我想返回到同一位置(打开卡片),新添加的项目将显示在列表中,并显示当天的总工作时间。

目前,我已完成部分编辑。我打开卡并编辑现有项目之一。数据已保存,但是当我返回上一个屏幕时,无法更新UI上的小时数。当我再次打开编辑屏幕时,显示的数据将按预期进行。

非常感谢您,

玛雅

2 个答案:

答案 0 :(得分:1)

首先,您需要在showDialog内调用Stateful Widget才能访问州(名称顾名思义)。然后,在该屏幕上,您可以调用一个方法并显示您的对话框,它将返回一个Future<void>,这意味着您可以在取消对话框后执行操作,例如

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

,您的用户界面将更新以匹配更改。

答案 1 :(得分:1)

要刷新屏幕时,在对话框的pop Navigator中返回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}