扑。将一个 Draggable 项拖到另一个 Draggable 项上

And*_*dan 5 flutter flutter-layout

我有下面的板。有一个Stack由 2 x 10 个小部件组成的覆盖层 ( ),一些透明的部件DragTargets在它们的上方,宽度和高度相同的部件是Draggable. 所述Draggable的有包含图像的那些。

在此处输入图片说明

我面临的问题是下面的onWillAcceptonAccept方法在我拖动上面的方法时没有被调用。我猜是因为有覆盖它们的小部件。

我已经切换了小部件,DragTargets覆盖了Draggable那些小部件,但现在我无法拖动它们,因为它们位于其他小部件下方。

拖放的所有示例都是从一个地方拖动一个项目并将其放置在另一个地方,一个可拖动的,一个 dragTarget。我需要一个小部件(或屏幕上的一个区域)既可拖动又可拖动目标。我怎么能做到这一点?

这是布局

          Align(
            child: Container(
              decoration: BoxDecoration(
                image: DecorationImage(
                  image: AssetImage("images/user_board.jpg"),
                  alignment: Alignment.bottomCenter,
                ),
              ),
              height: _userBoardH,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Container(
                      height: _tileH,
                      child: Stack(children: <Widget>[
                        Row(
                          children: _buildSlots(ScreenBoard.FIRST_ROW),
                        ),
                        Row(
                          children: _buildTiles(ScreenBoard.FIRST_ROW),
                        ),
                      ])),
                  Container(
                      height: _tileH,
                      child: Stack(children: <Widget>[
                        Row(
                          children: _buildSlots(ScreenBoard.SECOND_ROW),
                        ),
                        Row(
                          children: _buildTiles(ScreenBoard.SECOND_ROW),
                        ),
                      ])),
                ],
              ),
            ),
            alignment: Alignment.bottomCenter,
          ),
Run Code Online (Sandbox Code Playgroud)

干杯。

编辑

按照帕特里克的建议解决了这个问题。这是解决方案:

Widget _buildTile(Tile widget) {
  return DragTarget<Map>(
    builder: (context, candidateData, rejectedData) {
      return Container(
        child: Draggable<Map>(
          child: _getTile(widget),
          feedback: _getTile(widget),
          childWhenDragging: Container(
            width: widget._dimenW,
            height: widget._dimenH,
          ),
          data: {
            Tile.DATA_TILE_ROW_TYPE: widget._rowType,
            Tile.DATA_TILE_ROW_POS: widget._rowPosition,
            Tile.DATA_TILE_ID: widget._tileId,
          },
        ),
      );
    },
    onWillAccept: (data) {
      UDebug.log("onWillAccept");
      return false;
    },
    onAccept: (data) {
      UDebug.log("onAccept");
    },
  );
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*lly 8

将其包装在 Container() 小部件中,并将图像放入 BoxDecoration() 中,并使用 child: 属性来保存 Draggable()。

这不会阻碍您的指针事件。