Flutter 动画包 - 当用户导航回来时如何等待 Navigator.push() 执行某些操作

Ben*_*rad 5 dart flutter flutter-animation

首先,我使用的是Flutter 的动画包,我的问题只是关于使用这个包:

在使用该包之前,我使用 wait 关键字将第二个视图推送到导航器,因此当用户从第二个视图返回时,将调用此后的代码:

await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => DetailView()),
    );
loadData();
Run Code Online (Sandbox Code Playgroud)

现在集成这个动画库后,我不调用Navigator.push()自己,而只定义目标小部件,导航由库完成。到目前为止,任何列表项的代码都只是 ListTile 小部件,现在它看起来像这样:

return OpenContainer(
  openBuilder: (BuildContext _, VoidCallback closeContainer) {
    return DetailView();
  },
  closedBuilder: (BuildContext _, VoidCallback openContainer) {
    return _buildListTile(openContainer);
  },
);
Run Code Online (Sandbox Code Playgroud)

在 _buildListTile 方法中,ListTile 是用 InkWell 包装的,InkWell 将此VoidCallback openContainer作为 onTap 参数。

我不知道如何等待用户单击第二个视图,从而返回第一个视图。我需要(重新)加载数据,如第一个代码片段所示。有人这样做过并且可以告诉我吗?我尝试使用 和openBuilderclosedBuilder但不幸的是没有成功......

E.B*_*dos 4

感谢两天前的这个GitHub 问题,OpenContainer onClose用户“The-Redhat”在动画包主分支上推送了启用事件的更改

要在包正式版本发布之前使用它,只需将animationspubspec.yaml 中的包替换为

animations:
    git:
      url: git://github.com/flutter/packages.git
      path: packages/animations
Run Code Online (Sandbox Code Playgroud)

此时,您可以简单地将自定义函数传递给OpenContainer小部件,该小部件将在每次关闭时执行。在您的情况下,您现在可以在用户返回“父小部件”时更新数据。

更新 从 2020 年 6 月 2 日起,此功能可在animations v1.1.0

添加 OpenContainer.onClosed,当容器被弹出并返回到关闭状态时,会调用该函数并返回一个返回值。