解决flutter_pulltorefresh下拉刷新后无法上滑

3,489 阅读1分钟

问题

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,否则有可能出现下拉刷新后无法滚动的问题。