在child里的scrollView直接设置controller给它即可。
首先,scrollController是先前的api就有的,后面改动的时候发现scrollController存在共用的问题,所以就弃用了,不打算删除, 主要是可能有一部分人引用了它,删了就会造成有的人更新报错。而暴露这两个东西,主要是为了在某些情况下,不需要addListener,只需要 控制跳转的情况。比如我实现聊天列表,我只需要控制ScrollView滚动到最下方,但我不需要监听它的位置的情况。
有这个报错提示的话,一般都是因为在child没有限定高度,比如说PageView,你不能直接在child里放进去,你需要给予PageView 一个高度的限制
在RefreshConfiguration有提供一个属性hideFooterWhenNotFull,绝大多数的情况,它可以帮你计算并判断是否隐藏。
这个问题我内部已经有完美的解决方法,需要依赖到我的三方插件来解决控制gif进度的问题,用法详见这里,例子
这个问题建议你去查flutter里的api,需要明白一定的物理和数学知识。事实上,我也不知道怎么算
RefreshConfiguration配置属性maxUnderScrollExtent,自己判断平台然后,0.0代表不回弹
RefreshConfiguration配置属性footerTriggerDistance,屏幕一半你可以借助MediaContent或者LayoutBuilder来计算屏幕高度
第一种可能,就是你把给予了ScrollController给child,所以不是Scaffold里的PrimaryScrollController,所以不跳转 第二种可能,就是你外部的Scaffold不是你最顶层的Scaffold
因为我内部就是采用CustomScrollView来实现的,而CustomScrollView它不像BoxScrollView会帮你注入padding,所以需要你自己注入padding或者使用SafeArea
自1.3.0换了一套新的方法去实现指示器,内部指示器实现是通过监听scrollController位置变化来实现的,并没有使用到类如NotificationListener和GestureDector这类可能引起滑动手势冲突的方法, 所以应该可以兼容大多需要利用到手势之间的库。但是,可能不兼容一些库需要改写ScrollPhysics,内部的FrontStyle就很明显需要用到这个。
参见RefreshConfiguration里的shouldFooterFollowWhenNotFull,可完美解决。
因为SingleChildView它内部采用的Viewport是SingleChild,而其他Viewport基本都是MultipleChild,所以我内部是没办法取它的Viewport里的sliver,取了也 不能添加header和footer,直接把child存放在SmartRefresher child里即可,child为非ScrollView,作用等同于SingleChildScrollView
14.为什么拖到最大的距离不能触发刷新?为什么加载更多不触发? 这类问题一般发生在Android系统,绝大数情况是因为maxOverScrollExtent和maxUnderScrollExtent限制了最大拖动的高度问题,你需要确保它要大于triggerDistance,因为内部 没有帮你自动识别判断
15.为什么引用库后,随着数据量大时越来越卡顿? 这种情况绝大多数都是因为开启了shrinkWrap=true和设置physic:NeverScrollPhysics,ScrollView一定要作为SmartRefresher's child,不可分开。