xuelongqy / flutter_easy_refresh

A flutter widget that provides pull-down refresh and pull-up load.
https://xuelongqy.github.io/flutter_easy_refresh/
MIT License
3.85k stars 630 forks source link

请问有什么方法可以重设Header的高度吗? #728

Closed Dabbit-Chan closed 1 year ago

Dabbit-Chan commented 1 year ago

这边要实现一个功能,刷新成功后显示一行”刷新成功“的text。我把它放到了CustomHeader里,但是此时出现了个问题。我平时loading的图标高度是70,text的高度是30。我如果很单纯地把图标转换成text,那么在header那里就会出现40的间隔。有什么办法把这40的间隔干掉吗? image

Dabbit-Chan commented 1 year ago

easyRefresh版本号为3.3.1

xuelongqy commented 1 year ago

修改triggerOffset?

Dabbit-Chan commented 1 year ago

修改triggerOffset?

这个试过了,写了个动态的triggerOffset,但是没起作用。但是现在想了想,可能是因为我是hotreload所以没起作用?毕竟header一旦创建就一直在那里。

Dabbit-Chan commented 1 year ago

image 这样去修改triggerOffset不起作用,triggerOffset也不是那种ValueListenableBuilder

xuelongqy commented 1 year ago

在CustomHeader外层通过传参的方式修改

Dabbit-Chan commented 1 year ago

外层传入easyRefreshController,然后拿里面的state?待会试试

xuelongqy commented 1 year ago

给CustomHeader添加triggerOffset属性,在刷新成功前修改triggerOffset。我不确定是否能够符合预期。但我觉得你这个需求有点奇怪

Dabbit-Chan commented 1 year ago

你可以看看知乎的刷新交互,他刷新成功了之后会有个提示。这里就是想实现这个功能但又不想改动太多,所以就从header上下功夫了 image

Dabbit-Chan commented 1 year ago

给CustomHeader添加triggerOffset属性,在刷新成功前修改triggerOffset。我不确定是否能够符合预期。但我觉得你这个需求有点奇怪

确实可行,在mode == IndicatorMode.processing的时候刷新整个easyRefresh就行了。但是还是想问一下,有没有办法只刷新header而不刷新一整个?毕竟刷新一整个的性能不是很理想

xuelongqy commented 1 year ago

给CustomHeader添加triggerOffset属性,在刷新成功前修改triggerOffset。我不确定是否能够符合预期。但我觉得你这个需求有点奇怪

确实可行,在mode == IndicatorMode.processing的时候刷新整个easyRefresh就行了。但是还是想问一下,有没有办法只刷新header而不刷新一整个?毕竟刷新一整个的性能不是很理想

为啥会不理想呢?Flutter原本的状态更新原理就是刷新整个页面,Flutter本身有很多优化,所以偶尔使用也不会影响性能。过度的优化一定是负优化

Dabbit-Chan commented 1 year ago

主要是一直想着最小限度刷新。其实页面看起来也没啥卡顿的,只是心理作用。

xuelongqy commented 1 year ago

主要是一直想着最小限度刷新。其实页面看起来也没啥卡顿的,只是心理作用。

对嘛,强迫症心理。其实很简单,如果让EasyRefresh去做的话,可能每次更新都得计算triggerOffset的值。但是在外层修改的话,只有在刷新成功前修改一次