首页 文章

刷新指示器没有滚动视图

提问于
浏览
14

我知道ListViewSingleChildScrollView RefreshIndicator本身就可以正常工作,但我想在不滚动的页面上使用RefreshIndicator。这是否可能,如果是这样,怎么样?

3 回答

  • 24

    您必须执行以下操作:

    • 使用属性physics设置为AlwaysScrollableScrollPhysics()SingleChildScrollView

    • 确保它的孩子的高度与屏幕的大小相同,您可以使用MediaQuery.of(context).size.height获得。

    完整的例子:

    classs MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return RefreshIndicator(
          onRefresh: () {},
          child: SingleChildScrollView(
            physics: AlwaysScrollableScrollPhysics(),
            child: Container(
              child: Center(
                child: Text('Hello World'),
              ),
              height: MediaQuery.of(context).size.height,
            ),
          ),
        );
      }
    }
    
  • 2

    所以在我的情况下,我想在空列表中显示占位符:

    RefreshIndicator(
                child: Stack(
                  children: <Widget>[
                    Center(
                      child: Text("The list is empty"),
                    ),
                    ListView()
                  ],
                ),
                onRefresh: () {},
              )
    
  • 0

    没有不滚动的页面是否可能?

    -No。


    请阅读 RefreshIndicator 中参数 child 的文档:

    树中此小部件下方的小部件。

    刷新指示器将堆叠在此孩子的顶部。当孩子的 Scrollable 后代为 over-scrolled 时,指示符将出现。

    通常是[9]或[10]。


    有 work-around?

    -Yes

    您只能在 Listview 的子列表中放置一个小部件:

    new RefreshIndicator(
      child: new ListView(
        children: <Widget>[
          new Text('This is child with refresh indicator'),
        ],
      ),
      onRefresh: () {},
    )
    

相关问题