Very Good InfiniteList初始化自动调用onFetchData的优化咨询
解决InfiniteList初始化自动调用onFetchData的更优方案
直接用组件自带的initialLoad参数就能搞定,不用自己维护布尔变量:
这个组件默认会在初始化时触发onFetchData,但它提供了initialLoad配置项,把它设为false就能关闭首次自动调用,之后只会在滚动到底部时触发加载逻辑:
InfiniteList( isLoading: state.loadMore, loadingBuilder: (context) => widgetLoadMore(), initialLoad: false, // 关键:关闭初始化时的自动调用 onFetchData: () { bloc.add(GetMore()); // 现在仅在滚动触底时执行 }, )
如果你的组件版本没有initialLoad参数,也可以自己封装一个简单的单次拦截工具类,避免手动维护布尔变量:
// 简单的单次执行拦截器 class Once { bool _triggered = false; void execute(VoidCallback func) { if (_triggered) { func(); return; } _triggered = true; } } // 使用方式 final loadInterceptor = Once(); onFetchData: () { loadInterceptor.execute(() { bloc.add(GetMore()); }); },
第一种方案是最推荐的,完全利用组件原生能力,代码更简洁也更易维护。
内容的提问来源于stack exchange,提问作者Truong Ngoc Tuan
相关产品推荐
相关产品推荐

