我有一个页面(有状态小部件(,它加载一个子部件,这个子部件是一个网格,它加载另一个子部件一个网格项的详细信息。
在单个网格项目的详细信息中,有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