如何在Navigator.pushNamed()之后从当前页面的子无状态小部件更新上一页



我有一个页面(有状态小部件(,它加载一个子部件,这个子部件是一个网格,它加载另一个子部件一个网格项的详细信息。

在单个网格项目的详细信息中,有InkWell,当点击时,我导航到一个新页面。

网格小部件和单个网格项都是无状态的小部件

当我使用后退按钮从新页面返回时,我想更新预览页面。

例如,从我拥有的单个网格项目来看:

Navigator.pushNamed(
context,
SingleMoviePage.routeName,
arguments: movie,
).then((_){
var pressed = Provider.of<MoviesListProvider>(context,listen: false).listPageButtonPressed;
if (pressed) {
updateChanges();
}
});

我可以通过将updateChanges函数传递到网格小部件和从网格小部件传递到页面来更新页面。但是,使用provider有更好的方法吗?或者另一种方式,而不需要将函数从子对象发送到父对象以及从父对象发送到祖父母?

首先,您可以将数据源放在ChangeNotifier中,当它更新时,您可以notify所有依赖它的小部件。

另一个快速解决方案是使用GlobalKey访问静态小部件的状态,如下所示:

GlobalKey<yourStateFulWidget> myKey = GlobalKey()

然后访问和编辑数据,如:

myKey.currentState!.someFunctionOrData();

注意:为了更好地了解如何完成第一个解决方案,我建议您阅读flutter团队的官方示例:

https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple

相关内容

最新更新