flutter刷新页面数据,页面跳转
需求
从A页面进入详情页面B,B页面经过逻辑操作导致数据更改,当回到A页面时,需要更改A页面的数据项,有如下办法:
- 返回A页面直接刷新,用户体验很差
- 通过监听手势实现Navigator.of(context).pop(),很抱歉,我没找到监听手势的方法,通过按钮倒是可以实现,但是总不可能取消手势动作,用户习惯我们无法预知。
- 通过Stream实现消息订阅和跨组件通知。
Stream实现消息订阅和跨组件通知
第一步:建立通信类
StreamController<WorkEventBean> workBeanStream = StreamController.broadcast();
class WorkEventBean{
int index;
dynamic data;
WorkEventBean(this.index, this.data);
}
第二步:在需要数据更改的页面监听通信
// 消息订阅监听对象
StreamSubscription _streamSubscription;
@override
void initState() {
super.initState();
// 添加消息监听
_streamSubscription = workBeanStream.stream.listen((WorkEventBean event) {
if (event.index != null) {
// 这里主要看你的代码逻辑是什么样的,主要是寻找到目标数据,将该数据替换成传输过来的数据项
// 如果是List数据,也可以通过for循环再判断获取
if (widget.workBean.id == event.index) {
// 替换数据 widget.workBean即目标数据项,根据实际自行更改
widget.workBean = event.data;
setState(() {});
}
}
});
}
第三步:通过通信类通知其他页面更改数据
// 你前面的逻辑导致的_workBean的数据更改
// widget.id可以是数据项的唯一id,也可以是List的下标索引,根据实际需要传值
........
workBeanStream.add(WorkEventBean(widget.id, _workBean));