小编spk*_*ten的帖子

如何防止在父小部件 GestureDetector 上触发 onTapDown?

我有一个堆栈,可以在其中拖动几个小部件。此外,Stack 所在的容器有一个 GestureDetector 来触发 onTapDown 和 onTapUp。我希望这些 onTap 事件仅在用户点击 Stack 中的小部件外部时触发。我试过以下代码:

class Gestures extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _GesturesState();
}

class _GesturesState extends State<Gestures> {
  Color background;
  Offset pos;

  @override
  void initState() {
    super.initState();
    pos = Offset(10.0, 10.0);
  }

  @override
  Widget build(BuildContext context) => GestureDetector(
    onTapDown: (_) => setState(() => background = Colors.green),
    onTapUp: (_) => setState(() => background = Colors.grey),
    onTapCancel: () => setState(() => background = Colors.grey),
        child: Container(
          color: background,
          child: Stack(
            children: <Widget>[
              Positioned( …
Run Code Online (Sandbox Code Playgroud)

gesture-recognition flutter

6
推荐指数
1
解决办法
3883
查看次数

具有协变返回类型的方法在VC++上崩溃

当使用clang或gcc(在macOS上)编译时,以下代码似乎运行正常,但在使用MS Visual C++ 2017编译时崩溃.在后者上,foo_clone对象似乎已损坏,程序崩溃时出现访问冲突foo_clone->get_identifier().

如果我删除协变返回类型(所有clone-methods返回IDO*),或何时std::enable_shared_from_this删除,或者所有继承都是虚拟的,它确实适用于VC++ .

为什么它适用于clang/gcc而不适用于VC++?

#include <memory>
#include <iostream>

class IDO {
public:
    virtual ~IDO() = default;

    virtual const char* get_identifier() const = 0;

    virtual IDO* clone() const = 0;
};

class DO
    : public virtual IDO
    , public std::enable_shared_from_this<DO> 
{
public:
    const char* get_identifier() const override { return "ok"; }
};

class D : public virtual IDO, public DO {
    D* clone() const override {
        return nullptr;
    }
};

class IA …
Run Code Online (Sandbox Code Playgroud)

c++ virtual-inheritance visual-c++ clang++ c++14

5
推荐指数
1
解决办法
321
查看次数