颤振。将一个可拖动项拖到另一个可拖动项上

问题描述 投票:1回答:1

我有下面的板。有一个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");
    },
  );
}
flutter flutter-layout
1个回答
2
投票
这不会阻碍您的指针事件。
© www.soinside.com 2019 - 2024. All rights reserved.