Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:使用刷新指示器时无刷新指示器_Flutter_Dart_Pull To Refresh - Fatal编程技术网

Flutter 颤振:使用刷新指示器时无刷新指示器

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

我将RefreshIndicator添加到我的页面中,但在拉动刷新时没有可见的指示器。代码如下:

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(),
    )
);