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

当child不是ListView,GridView,CustomScollView(内部含有滚动组件)时,无法对其进行识别,下拉刷新失效 #298

Open
biancheng347 opened this issue Jun 3, 2020 · 12 comments

Comments

@biancheng347
Copy link

return SmartRefresher(
enablePullDown: true,
enablePullUp: true,
header: WaterDropHeader(),
footer: _buildRefreshFooter(),
controller: _refreshController,
onRefresh: _onRefresh,
onLoading: _onLoading,
child: HomeBody(), //homeBody == StateFullWidget
);

因为 refresh file文件封装refresh逻辑代码 HomeBody 是ListView 分装逻辑代码,这样好管理代码,但是 现在框架必须要 refresh + listView 直接耦合,希望作者可以改进获取HomeBody里面的ListView 这样有助于代码分解。

@peng8350
Copy link
Owner

peng8350 commented Jun 6, 2020

这个我肯定知道的,主要是没办法才这么做。因为如果要往控件树下获取到ScrollVIew,第一要费时间,第二不确定是哪个ScrollView(子树下存在很多ScrollView)。当然目前有一种做法,你也可以使用SmartRefresher.builder()+CustomScrollView的做法这样就可以化解耦合度。

@biancheng347
Copy link
Author

因为如果要往控件树下获取到ScrollVIew,第一要费时间,第二不确定是哪个ScrollView(子树下存在很多ScrollView)。 可以不可以,给需要绑定的scrollview 绑定一个属性,好让refresh 识别

@biancheng347
Copy link
Author

因为如果要往控件树下获取到ScrollVIew,第一要费时间,第二不确定是哪个ScrollView(子树下存在很多ScrollView)。 或者给需要绑定的scrollview 通过content 关联 refresh

@peng8350
Copy link
Owner

peng8350 commented Jun 6, 2020

不行的,即便获取到ScrollView,也没办法对内部的Viewport进行追加header和footer

@peng8350
Copy link
Owner

peng8350 commented Jun 6, 2020

唯一的办法,就是实现和NestedScrollView一样的机制,内外联动,但是水平有限,里面源代码都看不懂,更别说实现了

@peng8350 peng8350 pinned this issue Jun 28, 2020
@peng8350 peng8350 changed the title refresh.child = statefullWidget 没有出现refresh 当child不是ListView,GridView,CustomScollView(内部含有滚动组件)时,无法对其进行识别,下拉刷新失效 Jun 28, 2020
@hu70258tao
Copy link

我自己实现了一个组件,最外部的是一个ReorderableListView,当ReorderableListView的内容较少时,可以下拉刷新,当内容较多差生滚动时,就不能刷新了.

@chentianxin
Copy link

我自己实现了一个组件,最外部的是一个ReorderableListView,当ReorderableListView的内容较少时,可以下拉刷新,当内容较多差生滚动时,就不能刷新了.

请问现在有好的解决方案吗?

@HuberCui
Copy link

同问啊,我child必须是stack,stack里边是两个stateful控件,也是下拉刷新不可以了

@hu70258tao
Copy link

我自己实现了一个组件,最外部的是一个ReorderableListView,当ReorderableListView的内容较少时,可以下拉刷新,当内容较多差生滚动时,就不能刷新了.

请问现在有好的解决方案吗?

两个月了,不管是第三方或是自己写,没有找到合适的方法

@sm9i
Copy link

sm9i commented Feb 2, 2021

为什么我可以?
`
@OverRide
Widget build(BuildContext context) {
return Scaffold(
appBar: const AppBarWidget(title: 'test'),
body: SmartRefresher(
controller: _controller,
onRefresh: () {
Future.delayed(Duration(milliseconds: 2000), () {
_controller.refreshCompleted();
});
},
child: Container(
color: Colors.redAccent,
),
),
);
}

`
可以刷新啊😢,或者是我跟你们说的不一样?

@peng8350
Copy link
Owner

@sm9i 你内部不存在Scrollable组件是没问题的,他们说的是内层深部存在Scrollable的情况,比如PageView和ScrollPositionedList,这两个组件会导致问题.

@SalahAdDin
Copy link

Is this related to the fact pull up is not working correctly?

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

7 participants