如何使用OffStage组件实现FlutterMap状态保持,避免页面返回时重载
核心修改逻辑
Offstage组件的控制属性offstage的逻辑和Visibility的visible完全相反:
offstage: true:组件隐藏,不会在页面绘制,但会保留在组件树中,状态全程维持offstage: false:组件正常展示
你不需要改动现有业务逻辑,只需要替换主页面中Visibility部分的代码即可,其余逻辑(包括第二页的回调、跳转逻辑)都可以保持不变。
具体代码修改
- 主页面
_MainScreenState的build方法中,将原来的Visibility组件替换为如下代码:
Scaffold( body: Container( // 原有margin配置保持不变 margin: EdgeInsets.fromLTRB(0, 0, 0, 300), child: Offstage( // 逻辑取反即可适配原有isVisible字段 offstage: !isVisible, child: FlutterMap(), ), ), // 其余Scaffold配置、GestureDetector跳转逻辑完全保留不用修改 )
补充说明
Offstage天生自带子组件状态保留能力,不需要像Visibility一样额外配置maintainState、maintainAnimation等参数,只要isVisible的赋值逻辑正确,地图在隐藏、重新显示的过程中不会触发重载,之前的缩放、位置等状态都会完全保留。
内容的提问来源于stack exchange,提问作者Pannam T
相关产品推荐
相关产品推荐

