首页 > 解决方案 > 如何在颤动中仅向下滚动?

问题描述

我有一个可以上下滚动的 Pageview 滚动条。一旦向下滚动不能向上滚动,我可以让它只向下滚动吗?我用谷歌搜索,但我没有发现任何有用的东西

更新 :

class _ScrollDownOnlyState extends State<ScrollDownOnly> {
  bool checkDir = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Down scroll"),
      ),
      body: PageView.builder(
        scrollDirection: Axis.vertical,
        physics: checkDir ? const NeverScrollableScrollPhysics() : const AlwaysScrollableScrollPhysics(),
        itemBuilder: (context, index) {
          print("checl $checkDir");
          return GestureDetector(
            onPanUpdate: (details) {
              print(details.delta.dy);
              if (details.delta.dy > 0) {
                setState(() {
                  checkDir = true;
                });
              }
              if (details.delta.dy < 0) {
                // set your var
                setState(() {
                  checkDir = false;
                });
              }
            },
            child: Container(
              margin: EdgeInsets.only(top: 20),
              color: Colors.pink,
              child: Center(
                child: Text(
                  "${index + 1}",
                  style: TextStyle(color: Colors.white, fontSize: 30),
                ),
              ),
            ),
          );
        },
        itemCount: 50,
      ),
    );
  }
}

标签: flutter

解决方案


例如,您可以使用 varscrollDir并将其应用于PageView

physics: scrollDir ? const  NeverScrollableScrollPhysics() : const AlwaysScrollableScrollPhysics(),

随着NeverScrollableScrollPhysics()你阻止滚动能力。随着AlwaysScrollableScrollPhysics()您激活滚动功能。

GestureDetector通过检测向上或向下滚动,您将获得完全控制。它可能看起来像这样:

PageView(
            children: <Widget>[
              // Add children here
              GestureDetector(
                  onPanUpdate: (details) {
                    if (details.delta.dy > 0) {
                      setState(() {
                        checkDir = true;
                      });
                    }
                    if (details.delta.dy < 0) {
                      // set your var
                      checkDir = false;
                    }
                  },
                  child: Container(child: Text('MY WIDGETS')))
            ],
            physics: checkDir
                ? const NeverScrollableScrollPhysics()
                : const AlwaysScrollableScrollPhysics(),
          )),

Scrollphysics 文档:https ://api.flutter.dev/flutter/widgets/ScrollPhysics-class.html

GestureDetector 文档:https ://api.flutter.dev/flutter/widgets/GestureDetector-class.html


推荐阅读