【问题标题】:Single Child Scroll View Doesn't work with Gesture Detector单个子滚动视图不适用于手势检测器
【发布时间】:2020-11-20 06:03:28
【问题描述】:

我创建了一个SingleChildScrollView。手势检测器有一个父容器(红色)和一个子容器(蓝色)。滚动视图适用于父级,但不适用于子级。我应该怎么办?谢谢您的帮助。 这是代码。

body: SingleChildScrollView(
          child: Column(
            children: [
              Container(
                color: Colors.redAccent[200],
                height: 1000.0,
                width: 500.0,
                alignment: Alignment.center,
              ),

              GestureDetector(
                onVerticalDragUpdate: (DragUpdateDetails details) {
                  print("Start");
                  print(details.localPosition);
                },
                child: Container(
                  color: Colors.blueAccent[200],
                  height: 10000.0,
                  width: 500.0,
                  alignment: Alignment.center,
                ),

              )
            ],
          ),
        )

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    尝试像这样用 SingleChildScrollView 包装 GestureDetector。

    body: SingleChildScrollView(
      child: Column(
        children: [
          Container(
            color: Colors.redAccent[200],
            height: 1000.0,
            width: 500.0,
            alignment: Alignment.center,
          ),
          SingleChildScrollView(
            child: GestureDetector(
              onVerticalDragUpdate: (DragUpdateDetails details) {
                print("Start");
                print(details.localPosition);
              },
              child: Container(
                color: Colors.blueAccent[200],
                height: 10000.0,
                width: 500.0,
                alignment: Alignment.center,
              ),
            ),
          ),
        ],
      ),
    );
    

    【讨论】:

    • 仍然不在蓝色容器上滚动。仅在红色 Container 上。
    • 嘿Lakshan!你能告诉我你想达到什么目标吗?
    • 您想在两个容器上滚动?如果是,请检查答案
    • @LakshanCosta 你解决过这个问题吗??如果是,请把技巧传给我。
    • 对不起,伙计。我想我做到了,但我没有代码(我的文件被删除了:(),不记得了
    【解决方案2】:

    onVerticalDragUpdate 正在阻止SingleChildScrollView 滚动,因为它只是检测到垂直拖动更新,当您按住它拖动小部件时,它会忽略 ScrollView 并监听小部件的可拖动更新。 运行以下代码。它现在对我有用。

    body: SingleChildScrollView(
              child: Column(
                children: [
                  Container(
                    color: Colors.redAccent[200],
                    height: 1000.0,
                    width: 500.0,
                    alignment: Alignment.center,
                  ),
                  GestureDetector(
                    // onVerticalDragUpdate: (DragUpdateDetails details) {
                    //   print("Start");
                    //   print(details.localPosition);
                    // },
                    child: Container(
                      color: Colors.blueAccent[200],
                      height: 1000.0,
                      width: 500.0,
                      alignment: Alignment.center,
                    ),
    
                  )
                ],
              ),
            )
    

    【讨论】:

    • 我想在两个容器上滚动,也知道details.localPosition。上面的代码不会给出位置。
    • 嗯,Lakshan,我认为这是不可能的。
    • 它怎么知道它应该检测到触摸还是滚动?
    • 哦,不能两者兼得吗?
    • 据我所知。不!但总有一个黑客攻击
    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多