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

У меня есть виджет с отслеживанием состояния под названием Square (шахматы). Я вызываю setstate для различных его свойств, но он не обновляется на экране, если я не выполняю горячую перезагрузку. объединение этих 64 в 8 списков по 8, а затем передача их в список, называемый доской. Вот пример квадратных объектов:

Square(address: 'A8', piece: blackRook, color: kWhiteSquares)

Затем я создаю сетку:

class _ChessBoardState extends State<ChessBoard> {
  List<List> board = startingSetup;
  bool turn = true;
  Square selected;
  @override
  Widget build(BuildContext context) {
    return Expanded(
      flex: 5,
      child: GridView.count(
        crossAxisCount: 8,
        children: List.generate(
          64,
          (index) {
            Square square = board[index ~/ 8][index % 8];
            square.onPressed = () {
              if (selected == null) {
                // shorter for you
              } else if (square == selected) {
                // shorter for you
              } else {
                print('three');
                setState(() {
                  selected.selected = false;
                  Piece p = selected.piece;
                  square.piece = p;
                  selected.piece = null;
                  selected = null;
                });
              }
            };
            return square;
          },
        ),
      ),
    );
  }
}

Я пропустил if и else if для вашего здравомыслия. Все условия работают, но отображаются на экране только после горячей перезагрузки. Почему виджет не восстанавливается автоматически, когда я вызываю setState? Должно быть, не должно ли, когда, например, вызывается setState на square.piece и добавляется новый кусок?

...