我有一个页面,它有一个带有刷新指示器的列表。当列表中有许多元素(填充整个视图以及更多内容,即我可以滚动)时,刷新指示器就能工作了。但是,当列表中只有一个或两个元素(没什么可滚动的)时,刷新指示符就不能工作了。这是预期的行为吗?是否有办法使指标也适用于短名单?
我尝试用滚动条包装列表视图(刷新指示器的子视图),但问题仍然存在。
Future<void> _onRefresh() async {
_getPeople();
}
@override
Widget build(BuildContext context) {
super.build(context);
return new Container(
child: _items.length == 0
? Center(child: CircularProgressIndicator())
: new RefreshIndicator(
onRefresh: _onRefresh,
child: Scrollbar(
child: new ListView.builder(
controller: controller,
itemBuilder: (context, index) {
return PeopleCard(
People: _items[index],
source: 2,
);
},
itemCount: _items.length,
),
)),
);
}
如果项目列表的长度为1或2或任何不需要滚动的数量,则刷新指示符也应该可以工作。
发布于 2019-08-15 22:44:38
将物理设置为AlwaysScrollableScrollPhysics,就像下面的代码一样。
new RefreshIndicator(
key: _refreshIndicatorKey,
color: Colors.blue,
onRefresh: (){
setState(() {
_future = fetchPosts(http.Client());
_getAvalailableSlots();
});
},
child: ListView.builder(
physics: AlwaysScrollableScrollPhysics(),
itemCount: data.length,
itemBuilder: (context, i) {
//do something
}
)
)
发布于 2022-04-25 04:53:03
案例1:
在您的Listview或SingleChildScrollView中使用AlwaysScrollableScrollPhysics()。
physics: const AlwaysScrollableScrollPhysics(),
案例2:
如果你想用其他的卷轴物理,用这个方法.
physics: BouncingScrollPhysics(
parent: AlwaysScrollableScrollPhysics(),
),
案例3:
确保你没有让shrinkWrap,真的。ShrinkWrap必须像默认一样是假的。
shrinkWrap:没错。❌
shrinkWrap:假的。✅
shrinkWrap: false,
案例4:
如果您有除listview以外的任何自定义小部件,请这样使用堆栈和listview .
RefreshIndicator(
onRefresh: () async {
print('refreshing');
},
Stack(
children: [
YourWidget(),
ListView(
physics: const AlwaysScrollableScrollPhysics(),
),
],
),
),
发布于 2021-08-09 05:19:51
与BouncingScrollPhysics一起使用:
RefreshIndicator(
onRefresh: () async {
},
child: ListView.builder(
physics: BouncingScrollPhysics(
parent: AlwaysScrollableScrollPhysics()),
itemBuilder: (context, index) {
return Text("${index}");
}),
https://stackoverflow.com/questions/57519765
复制