不使用ListView等刷新Flutter中的小部件或页面

时间:2019-07-12 02:27:17

标签: flutter flutter-animation

我要刷新页面而没有可滚动的内容,即没有ListView等。

当我想使用RefreshIndicator时,文档说它需要一个scrollable之类的ListView小部件。

但是,如果我想刷新并且想使用RefreshIndicator的刷新动画而不使用ListViewGridView或任何其他可评分的小部件,我该怎么做? >

2 个答案:

答案 0 :(得分:1)

您只需将内容包装在SingleChildScrollView中,即可使用RefreshIndicator。为了使下拉菜单刷新交互工作,您将不得不使用AlwaysScrollableScrollPhysics,因为您的内容很可能不会覆盖比没有滚动视图时可用的空间更多的空间:

RefreshIndicator(
      onRefresh: () async {
        // Handle refresh.
      },
      child: SingleChildScrollView(
        physics: const AlwaysScrollableScrollPhysics(),
        child: /* your content */,
      ),
    );

答案 1 :(得分:0)

您可以只使用GestureDetector,我已经为您创建了一个示例,但是它并不完美,您可以根据自己的需要对其进行自定义,它只会检测您何时从顶部滑动。

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {

  var refresh=false;

  void  refreshData(){
    if(!refresh){
      refresh=true;
      print("Refreshing");
      Future.delayed(Duration(seconds: 4),(){
        refresh =false;
        print("Refreshed");
      });
    }
  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: Text("Test"),
          centerTitle: true,
        ),
        body: GestureDetector(
          child: Container(
            color: Colors.yellow,
            height: double.infinity,
            width: double.infinity,
            child: Center(child: Text('TURN LIGHTS ON')),
          ),
          onVerticalDragUpdate: (DragUpdateDetails details){
            print("direction ${details.globalPosition.direction}");
            print("distance ${details.globalPosition.distance}");
            print("dy ${details.globalPosition.dy}");
            if(details.globalPosition.direction < 1 && (details.globalPosition.dy >200 && details.globalPosition.dy < 250)){

              refreshData();

            }
          },
        ));
  }
}