将文本传递给RaisedButton OnTap-Flutter

时间:2019-03-27 03:20:27

标签: dart flutter flutter-layout

我是Flutter的新手,我在打井字游戏中遇到很多麻烦。它可以在控制台中运行,但是我不知道如何使游戏在已构建的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”。

1 个答案:

答案 0 :(得分:0)

您将_mBoard值更新的部分和displayBoard()方法都包含在setState()中。调用setState()后,它将通知StatefulWidget更新视图。但是您在setState内调用displayBoard(),并且此方法尚未更新_mBoard值。

有两种解决方法,

  • 将_mBoard作为参数传递给displayBoard(_mBoard),因此它将访问本地_mBoard值而不是状态值。

  • 在调用setState()之后调用displayBoard。