扑。将可拖动项拖到另一个可拖动项上

时间:2019-10-08 17:31:45

标签: flutter flutter-layout

我有下面的板子。有一个2 x 10个小部件的覆盖图(Stack),其中一些透明的是DragTargets,而在它们上方,宽度和高度相同的是DraggableDraggable是包含图像的图像。

enter image description here

我面临的问题是,当我拖动上面的方法时,下面的方法中的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,
          ),

干杯。

编辑

按照帕特里克的建议解决。解决方法如下:

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");
    },
  );
}

1 个答案:

答案 0 :(得分:2)

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

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