将文本传递给RaisedButton OnTap - Flutter

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

我是Flutter的新手,我在使用tic tac toe游戏时遇到了很多麻烦。它在控制台中工作,但我无法弄清楚如何让游戏在我构建的GUI中工作。

我知道我需要一些游戏按钮的数组,但我不知道如何实现它。我用这样的行和列构建了游戏板:

      body: new Container(
          padding: EdgeInsets.all(14.0),
          child: Column(
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                Row(
                  //Start of the 1st Row
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    children: <Widget>[
                      // Button 0 in 1st Row
                      RaisedButton(
                        padding: const EdgeInsets.all(20.0),
                        onPressed: () {
                          _button0();
                        },
                        child: new Text(_mBoard[0],
                            textAlign: TextAlign.center,
                            style: new TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 40.0,
                              fontFamily: 'Roboto',
                            )),
                        color: Colors.grey[300],
                      ),

这是在第一个RaisedButton的onPressed函数中调用的_button0。他们上升到8。

  void _button0() {
    setState(() {
      if (_mBoard[0] == humanPlayer || _mBoard[0] == computerPlayer) {
        return;
      } else if (win == 0) {
        if (turn == 0) {
          _mBoard[0] = humanPlayer;
          _text = humanPlayer + " MOVED, O's TURN";
          turn = 1;
          win = checkWinner();
          checkGameOver(win);
          displayBoard();
        }
        if ((turn == 1) && (win == 0)) {
          turn = 0;
          computerTurn();
          win = checkWinner();
          checkGameOver(win);
          displayBoard();
        }
      }
    });
  }

打印板到控制台:

void displayBoard() {
  print(_mBoard[0] + " | " + _mBoard[1] + " | " + _mBoard[2]);
  print("-----------");
  print(_mBoard[3] + " | " + _mBoard[4] + " | " + _mBoard[5]);
  print("-----------");
  print(_mBoard[6] + " | " + _mBoard[7] + " | " + _mBoard[8]);
}

我希望用户选择RaisedButton来显示“X”,并选择计算机来显示“O”。

dart flutter flutter-layout
1个回答
0
投票

您包括更新了_mBoard值的部分和setState()中的displayBoard()方法。一旦调用setState(),它将通知StatefulWidget更新视图。但是你在setState中调用了displayBoard(),而且这个方法还没有更新的_mBoard值。

有两种方法可以解决这个问题,

  • 将_mBoard作为参数传递给displayBoard(_mBoard),因此它将访问本地_mBoard值而不是状态值。
  • 调用setState()后调用displayBoard。
© www.soinside.com 2019 - 2024. All rights reserved.