Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

给 InfiniteListView 加一个刷新控制器 #20

Closed
huangxianghan opened this issue Jun 12, 2020 · 1 comment
Closed

给 InfiniteListView 加一个刷新控制器 #20

huangxianghan opened this issue Jun 12, 2020 · 1 comment

Comments

@huangxianghan
Copy link

通常会遇到这样的场景,列表页顶部通常有搜索框,用户输入搜索内容触发整个列表重新获取数据并刷新列表。InfiniteListView并不支持用代码控制刷新。也有朋友给过一些例子 例如在 InfiniteListView 加上 ScrollController,用代码控制ScrollController下拉位置来触发下拉刷新,但是这样做有很多问题,例如当网络延时或其他原因查不到数据时,用这个方法就触发不了第二次刷新。我自己也想了一个解决方案,目前可以正常用代码触发刷新,希望交流一下。
添加一个控制器类
class InfiniteListViewRefreshController {
Future Function(bool) refreshFunc;
void refresh(bool pullDown) {
if(refreshFunc!=null) refreshFunc(pullDown);
}
}

在 InfiniteListView的构造函数中传入此类的实例。

在_InfiniteListViewState 中的initState 方法中将_InfiniteListViewState内置的刷新方法签名赋值给InfiniteListViewRefreshController 实例的refreshFunc字段,代码如下:

@OverRide
void initState() {
super.initState();

state = widget.initState ?? LoadingState<T>();
if (!state.initialized) {
  refresh(false);
}

if(widget.refreshController!=null) {
  widget.refreshController.refreshFunc = refresh;
}

}

这样可以调用InfiniteListViewRefreshController 的实例方法 refresh 来触发刷新。

@wendux
Copy link
Member

wendux commented Oct 7, 2021

InfiniteListView 组件已废弃,原因是:

  1. 实际场景中基本都需要定制无限列表, InfiniteListView 很难在不经修改的情况下用于实际项目中。
  2. 如果提供一个尽可能灵活可配置的 InfiniteListViewPlus,则参数又会过多,并且还是很难避免需要定制。

@wendux wendux closed this as completed Oct 7, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants