【发布时间】:2022-10-22 08:26:00
【问题描述】:
我有几个子屏幕让用户可以选择保存一些数据。当该屏幕关闭时,我希望推动子屏幕的父屏幕知道是否保存了数据。子屏幕保持didSave 标志并在保存数据时设置为true。
子屏幕有几种关闭方式:
- 硬件/软件后退按钮。
-
AppBar上的关闭按钮。 - 屏幕本身的按钮。
我可以使用Navigator.pop(context, didSave) 处理第三种情况,并在父级中使用final didSave = await Navigator.push<bool>(context, myRoute) 捕获didSave 标志。
但是,对于前两种情况,结果显然是null。
我已经查看了WillPopScope,但这仅用于确定是否应该关闭屏幕。我似乎无法设置要为推送调用返回的任何数据。
我还研究了将父屏幕包装在 Provider 中,它可以在其中侦听 didSave 状态,但是在发出时会立即触发,这对于我的用例来说是不可取的。我只想在关闭子屏幕时而不是在保存数据时采取行动。
如果发生了保存操作,我可能会使用WillPopScope 并在那里发出一个事件,但如果可用,我想要一个更简单的解决方案。
有没有我想念的方法?
谢谢!
【问题讨论】: