Flutter 调用Navigator.pop返回页面时如何强制刷新视图?
问题解决方法
你遇到的问题本质是Flutter的状态更新机制导致:只有State类调用setState方法时,才会触发当前页面的build方法重新渲染视图,你直接往thread数组追加数据后没有触发状态更新,所以只有后续其他交互触发重绘时才会显示新内容。
你可以按照以下步骤实现返回列表页自动刷新:
- 新建帖子页调用
Navigator.pop返回时,将新生成的帖子对象作为返回值携带 - 列表页跳转新建页时用
await接收返回的新帖子数据,调用setState更新本地thread数组触发重绘
代码示例
列表页跳转逻辑
// 列表页跳转至新建帖子页的点击事件 onAddThreadTap() async { // 等待新建页返回的结果 final newThread = await Navigator.push( context, MaterialPageRoute(builder: (context) => NewThreadPage()), ); // 校验返回值有效时更新数据 if (newThread != null) { setState(() { threads.add(newThread); }); } }
新建页提交逻辑
// 新建帖子页提交按钮触发逻辑 onSubmitTap() { // 构造你自己的帖子对象 final Thread newThread = Thread( title: titleController.text, content: contentController.text, // 其他自定义属性 ); // 返回列表页并携带新帖子数据 Navigator.pop(context, newThread); }
简化方案
如果你已经在提交新帖的逻辑里全局更新了thread数组,不需要传递数据的话,也可以在Navigator.push完成后直接执行空的setState触发重绘:
onAddThreadTap() async { await Navigator.push( context, MaterialPageRoute(builder: (context) => NewThreadPage()), ); // 直接触发重绘,使用最新的thread数组渲染 setState(() {}); }
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

