【问题标题】:How to refresh Dialog when the data has change? Flutter数据发生变化时如何刷新对话框?扑
【发布时间】:2021-05-19 17:04:06
【问题描述】:

我是一名新的 Flutter 开发人员,我遇到了一个问题,即使我尝试了很多,我也无法解决。

我正在开发一个应用程序,在某些时候会打开一个对话框(使用 showDialog())。在这个对话框中有 2 个 AutoCompleteTextField:

  • 在第一个中,数据将始终相同。所以有一个列表,用户需要选择其中一个选项。 First AutoCompleteTextField code

  • 在第二个中,要显示的数据取决于之前的选择。换句话说, whenever an item from the previous list is chosen, the subdata of the item will be requested. Second AutoCompleteTextField code

所需数据已正确获取,但对话框未刷新状态,因此第二个 AutoCompleteTextField 的建议显示为空。当我关闭并再次输入时,第二个的建议就会出现。

为了在数据更改时获得通知,我使用 ChangeNotifier 和 Provider,但不刷新对话框 (ChangeNotifier class)。我还使用 StatefulBuilder 来使用 setState,但同样不会刷新 (Dialog code)。

我想知道是否有其他方法可以刷新对话框。谢谢!

PD:这是我在 StackOverflow 中的第一个问题。我尽力了。

【问题讨论】:

    标签: flutter dialog refresh


    【解决方案1】:

    我认为您需要使用 Provider.of(context) 才能监听更新并刷新或添加/更新数据。

    Provider.of(context)

    我将创建一个小部件类而不是 _widgetTask 函数,然后在小部件构建函数中使用 Provider.of(context) ,如下所示(我认为您也可以尝试将它添加到 _widgetTask 函数中,但我不知道这是否会工作)。

    class WidgetTask extends StatelessWidget {
      //WidgetTask contructor here..
      @override
      Widget build(BuildContext context) {
        final odooData = Provider.of<OdooData>(context);
    

    然后使用 odooData 从提供者那里访问您需要更新/收听的数据/功能。

    您还可以使用 GestureDetector 包装小部件,以便在点击时使用 OnTap 属性更新小部件。

    【讨论】:

    • 非常感谢您回答我的问题。我试着按照你说的做,但它发生了同样的情况。主状态重建,但对话框没有。现在,我正在尝试使用 ListenableProvider。如果我解决了问题,我会更新。
    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2015-05-21
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多