Сборка DragTarget вызывается непрерывно несколько раз, когда над ним перемещается Draggable - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть Сетка Dragtargets, на которую я намереваюсь поставить Dragtbles. В настоящее время я делаю, когда вызывается конструктор dragTarget, я проверяю, что принятый список не пуст, а затем возвращаю контейнер с тем, как он должен выглядеть с Draggable, если список пуст, а затем вид по умолчанию. Но в настоящее время происходит то, что конструктор постоянно вызывается, когда над ним перемещается перетаскиваемый объект, и из-за этого мой вышеприведенный лог c не работает. Чего я не понимаю, так это почему сборка dragtarget вызывается постоянно. Я ожидаю, что он будет вызван один раз, когда на него упадет перетаскиваемый объект.

class DragTargetBoardState extends State<DragTargetBoard>{

  @override
  Widget build(BuildContext context) {
    return DragTarget(
      onWillAccept: (Coin coin) {
        return true;
      },
      onAccept: (Coin coin) {
        //something here

      },
      builder: (context, List<Coin> coins, rd) {
        print("build called");
        if(coins.length >0) {
          return Center(
              child: Container(
                height: MediaQuery
                    .of(context)
                    .size
                    .height < 1000
                    ? MediaQuery
                    .of(context)
                    .size
                    .height / 10
                    : 100,
                width: MediaQuery
                    .of(context)
                    .size
                    .width < 1000
                    ? MediaQuery
                    .of(context)
                    .size
                    .width / 10
                    : 100, 
                color: Colors.transparent,
                child: DraggableCoin(coin: Coin(pos: coins[0].pos, player: coins[0].player)),
              )
          );
        }else{
          return Center(
              child: Container(
                height: MediaQuery
                    .of(context)
                    .size
                    .height < 1000
                    ? MediaQuery
                    .of(context)
                    .size
                    .height / 10
                    : 100, 
                width: MediaQuery
                    .of(context)
                    .size
                    .width < 1000
                    ? MediaQuery
                    .of(context)
                    .size
                    .width / 10
                    : 100, 
                color: Colors.transparent,
              )
          );
        }
      },
    );
  }
}
...