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

标签 flutter dart flutter-animation

首先,我使用的是 animations package from Flutter我的问题只是关于使用这个包:

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

await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => DetailView()),
    );
loadData();

现在集成这个动画库后,我不调用 Navigator.push()我自己,但只定义目标小部件,导航由库完成。
而到目前为止,任何列表项的代码都只是 ListTile 小部件,现在它看起来像这样:
return OpenContainer(
  openBuilder: (BuildContext _, VoidCallback closeContainer) {
    return DetailView();
  },
  closedBuilder: (BuildContext _, VoidCallback openContainer) {
    return _buildListTile(openContainer);
  },
);

在 _buildListTile 方法中,ListTile 被一个 InkWell 包裹,它接受这个 VoidCallback openContainer对于 onTap 参数。

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

最佳答案

感谢这篇 GitHub issue前两天用户'The-Redhat'推送animations package master分支启用的更改OpenContainer onClose事件

要在软件包正式版发布之前使用它,只需替换 animations在你的 pubspec.yaml 中打包

animations:
    git:
      url: git://github.com/flutter/packages.git
      path: packages/animations

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

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

Add OpenContainer.onClosed, which is called with a returned value when the container was popped and has returned to the closed state.

关于Flutter 动画包 - 如何在用户返回时等待 Navigator.push() 执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60392067/

相关文章:

flutter - 在全屏对话框中禁用取消按钮

flutter - 列表 map 无法在Dart中使用吗?

flutter - 在 Flutter 中使用特定于平台的包

Flutter AnimationController/Tween 在 Multiple AnimatedBuilder 中重用

flutter - 动画期间按钮宽度不变

Flutter Custom Painter 和键盘问题

flutter firestore 流映射到另一个流

database - 使用flutter从Cloud Firestore访问数据

dart - Dart Editor无法运行当前选择-请选择可运行资源

android - 尝试在Flutter中使用Animator时发生编译错误