Как я могу определить, перекрываются ли виджеты в стеке? - PullRequest
0 голосов
/ 13 января 2020

Я планирую сделать простую игру во Флаттере, и для этого мне нужно определить, не совпадают ли некоторые виджеты в стеке (их части расположены друг над другом). Виджеты будут перемещаться все время, поэтому мне нужно запустить эту проверку в каком-то таймере.

Есть идеи? Ничто не приходит мне в голову.

1 Ответ

1 голос
/ 14 января 2020

Таймер

Проблема таймера, которую вы можете решить с помощью класса Timer из dart-asyn c нативный пакет . Приведенный ниже фрагмент кода создает таймер, который каждые 750 миллисекунд будет вызывать функцию с именем _myCallbackFunction. Например, функция обратного вызова может проверить, есть ли перекрытие виджетов.

Timer.periodic(Duration(milliseconds: 750), _myCallbackFunction);

Макет перекрытия стека

Вы можете использовать Positioned виджет из флаттера, чтобы контролировать, где будут находиться ваши виджеты помещены в стек.

Stack(
  children: <Widget>[
    Positioned(left: 5, top: 0, right: 0, bottom: 10, child: MyCustomWidget(), ); 
    Positioned(left: 10, top: 10, right: 0, bottom: 0, child: MyCustomWidget(), );
  ]
);

Как проверить, есть ли перекрытие

Ну, хитрость в управлении состоянием. Предполагая, что мы используем MyCustomWidget, потребуется сохранить позиционные параметры каждого MyCustomWidget в стеке и в конечном итоге проверить, есть ли виджеты в той же позиции top, right, bottom, left. Вы можете определить свои логики c, и я советую для использования библиотеки MobX для простого и мощного управления состоянием.

...