【问题标题】:Gesture detection in Expanded Container扩展容器中的手势检测
【发布时间】:2020-10-27 03:06:52
【问题描述】:

我的小部件区域是使用扩展容器创建的,例如:

child: Column(
  crossAxisAlignment: CrossAxisAlignment.stretch,
  children: [
    Container(
      color: Colors.blueGrey[200],
      child: Text(
        startTime,
        textAlign: TextAlign.left,
        style: TextStyle(
          backgroundColor: Colors.blueGrey[200],
          fontSize: 16,
          fontWeight: FontWeight.normal),
        ),
      ),
      Expanded(
        /* If this gesture detector is instantiated the tap is never found;
        child: GestureDetector(
        behavior: HitTestBehavior.translucent,
        onTap: () => print("OnTap"),
        */
        child:
          Container(color: Colors.red[600]),
        //),
      ),  // Expanded
  ], // children
), // Column

如果上面的代码是用这个包裹的

Expanded(
  child: GestureDetector(
    behavior: HitTestBehavior.translucent,
    onTap: () => print("OnTap"),
    child: Container(
      color: Colors.red[600],
      child: // Code above
    ), // Container
  ), //GestureDetector  
), // Expanded

那么 onTap 只注册在文本小部件中,而不会注册在最后一个展开的容器中。

检测没有在Container上触发,需要一个widget来填充待检测的空间是否正确?

编辑 我将扩展容器的手势检测更改为:

Expanded(
  child: Material(
    color: Colors.red[600],
    child: InkWell(
      onTap: () {print("InkWell");},
    ),  // InkWell
  ),  // Material
),  // Expanded

而且水龙头仍然无法识别。

【问题讨论】:

  • 你能显示 Column 的父小部件吗?和从 body 开始的代码,如果你使用的是脚手架?
  • @Anas Mohammed 我通过重写 Future Builder 解决了这个问题,返回一个 SpannableGrid 实例,更简洁。我应该删除问题还是添加自己的答案?代码是几百行代码,除了两周前我开始颤抖之外,没有人会从中学到任何东西?
  • 由你决定。您可以编写一个解决方案来描述它为什么不起作用,或者如果您认为编写答案对任何人都没有帮助,那么您可以删除。

标签: flutter gesture


【解决方案1】:

代码的第一个 sn-p 应该可以正常工作,我认为您的代码的另一部分出现错误,您能提供完整的代码吗?还有你在控制台中得到的东西。

这是您在 DartPad 中完全运行的代码 sn-p:https://dartpad.dev/f76d383475c5c7c35ca4bf59b0a83789

【讨论】:

  • 不幸的是我不能,因为它正在被添加到 SpanaableGridView,我不知道他们在做什么。
  • 你说的是这个 SannableGrid:pub.dev/packages/spannable_grid?如果您提供页面的所有代码,将会很有帮助。如果您认为问题是包的链接,我建议您在此处打开问题:github.com/ech89899/spannablegrid-flutter/issues
  • 该页面超过 350 行,并调用专有 api 以获取然后显示的信息。我将写一个较小的页面并伪造数据以使其易于理解。有没有其他方法可以调试 Flutter 应用?
  • 由于您的错误来自 UI,如果您没有提供有关您的 ui 的详细信息,我们无法帮助您,如果有错误阻止 Flutter 正确构建,请使用控制台日志进行调试UI 它会在这里。否则,如果您希望代码保持清晰易懂,那么将 UI 代码和对 API 的调用结合起来绝不是一件好事。
  • 感谢您的帮助,如果没有来自 api 的数据,页面将无法显示,我使用未来的构建器来构建 ui,因此有很多地方可能会出错。到目前为止,我已经使用颤振可能 2 周了,到目前为止,除了新手,我还会认为自己是什么。我现在对未来的建设者有麻烦。这就像把一根绳子推上山。
猜你喜欢
  • 2013-01-27
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多