Flutter 颤振:使用刷新指示器时无刷新指示器
我将RefreshIndicator添加到我的页面中,但在拉动刷新时没有可见的指示器。代码如下:Flutter 颤振:使用刷新指示器时无刷新指示器,flutter,dart,pull-to-refresh,Flutter,Dart,Pull To Refresh,我将RefreshIndicator添加到我的页面中,但在拉动刷新时没有可见的指示器。代码如下: class HomePage extends StatefulWidget { HomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => new _MyHomePageState(); } class
class HomePage extends StatefulWidget {
HomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: LocalGalleryTab(),
);
}
}
class LocalGalleryTab extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _LocalGalleryState();
}
}
class _LocalGalleryState extends State<LocalGalleryTab> {
@override
Widget build(BuildContext context) {
return new Container(child: new Center(
child: new RefreshIndicator(
child: Text("Local Gallery"),
onRefresh: _refreshLocalGallery,
),
));
}
Future<Null> _refreshLocalGallery() async{
print('refreshing stocks...');
}
}
类主页扩展StatefulWidget{
主页({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:LocalGalleryTab(),
);
}
}
类LocalGalleryTab扩展StatefulWidget{
@凌驾
状态createState(){
返回_LocalGalleryState();
}
}
类LocalGalleryState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回新容器(子项:新中心(
子项:新的刷新指示器(
儿童:文本(“本地画廊”),
onRefresh:\u refreshLocalGallery,
),
));
}
Future\u refreshLocalGallery()异步{
打印(刷新库存…);
}
}
如何使用刷新指示器?颤振不会提供太多信息。您需要在刷新指示器中添加滚动子项 见下面的例子
类主页扩展StatefulWidget{
主页({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:LocalGalleryTab(),
);
}
}
类LocalGalleryTab扩展StatefulWidget{
@凌驾
状态createState(){
返回_LocalGalleryState();
}
}
类LocalGalleryState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回新容器(子项:新中心(
子项:新的刷新指示器(
子:ListView(
子项:列表。生成(50,(f)=>文本(“项$f”),
),
onRefresh:\u refreshLocalGallery,
),
));
}
Future\u refreshLocalGallery()异步{
打印(刷新库存…);
}
}
根据设计,刷新指示器
与列表视图
配合使用
但是,如果您想对不可滚动的小部件使用RefreshIndicator
,您可以使用ListView将小部件包装到Stack
:
RefreshIndicator(
onRefresh: () {},
child: Stack(
children: <Widget>[ListView(), YOUR_CHILD_WIDGET],
),
),
刷新指示器(
onRefresh:(){},
子:堆栈(
children:[ListView(),您的\u CHILD\u小部件],
),
),
使用AlwaysScrollableScrollPhysics()
将确保滚动视图始终可滚动,因此可以触发刷新指示器
现在我想用BouncingScrollPhysics(父项:AlwaysScrollableScrollPhysics)
创建滚动物理,而不仅仅是AlwaysScrollableScrollPhysics()
滚动物理。因为BouncingCrollPhysics适用于Bouncing的短列表。现在,AlwaysScrollableScrollPhysics需要包含在预期行为中
RefreshIndicator(
onRefresh: _onRefresh,
child: ListView(
padding: EdgeInsets.all(8.0),
physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
children: _listData.map((i) {
return ListTile(
title: Text("Item $i"),
);
}).toList(),
)
);
ListView.builder上没有此功能!还有其他选择吗?只是想补充一点:当项目占用的高度小于父项高度时,刷新指示器可能不起作用。这是因为当项目占用的空间小于父项时,不允许滚动,并且只有当子项允许滚动时,刷新指示器才允许刷新。检查@Paresh Mangukiya的回答如果RefreshIndicator在短列表中不起作用,则可以修复问题。您可以实际使用physic:AlwaysScrollableScrollPhysics()。这将激活你的刷新指示灯,当它被拉下来,它不在乎列表是短还是长。还要确保onRefresh()回调中的任务是可等待的,或者您的解决方案是最好的。
RefreshIndicator(
onRefresh: _onRefresh,
child: ListView(
padding: EdgeInsets.all(8.0),
physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
children: _listData.map((i) {
return ListTile(
title: Text("Item $i"),
);
}).toList(),
)
);