问题
app中存在TabBarView,支持左右滑动。下拉刷新后,会卡住,当前Tab对应的View无法上下滑动。左右滑动切换Tab后可以上下滑动,再切回刚才无法滚动的Tab,有可能可以恢复滚动。
解决方法
全局配置RefreshConfiguration的enableScrollWhenRefreshCompleted属性设为true
// 全局配置子树下的SmartRefresher,下面列举几个特别重要的属性
RefreshConfiguration(
headerBuilder: () => WaterDropHeader(), // 配置默认头部指示器,假如你每个页面的头部指示器都一样的话,你需要设置这个
footerBuilder: () => ClassicFooter(), // 配置默认底部指示器
headerTriggerDistance: 80.0, // 头部触发刷新的越界距离
springDescription:SpringDescription(stiffness: 170, damping: 16, mass: 1.9), // 自定义回弹动画,三个属性值意义请查询flutter api
maxOverScrollExtent :100, //头部最大可以拖动的范围,如果发生冲出视图范围区域,请设置这个属性
maxUnderScrollExtent:0, // 底部最大可以拖动的范围
enableScrollWhenRefreshCompleted: true, //这个属性不兼容PageView和TabBarView,如果你特别需要TabBarView左右滑动,你需要把它设置为true
enableLoadingWhenFailed : true, //在加载失败的状态下,用户仍然可以通过手势上拉来触发加载更多
hideFooterWhenNotFull: false, // Viewport不满一屏时,禁用上拉加载更多功能
enableBallisticLoad: true, // 可以通过惯性滑动触发加载更多
child: MaterialApp(
........
)
);
小结
在flutter_pulltorefresh组件中有使用PageView和TabBarView左右滑动的话,需要把enableScrollWhenRefreshCompleted设置为true,否则有可能出现下拉刷新后无法滚动的问题。