按下flatButton后如何在“文本”小部件中显示文本?

时间:2019-04-23 21:35:32

标签: dart flutter statelesswidget

我正在尝试使用Flutter开发计算器应用程序,而不是通过键盘来输入,而是希望通过一些按钮来进行输入。当我按下一个按钮时出现问题,但是它没有在上面的“文本”小部件中显示相应的数据。

我的所有类都是无状态的,除了第一个MyApp类是有状态的。

我尝试通过在所有类之外创建一个常规变量,然后使用该变量将文本从按钮类传输到显示类,但这没有用。

常规变量是“ _calcText”

class DisplayAnswer extends StatelessWidget {

  final String _text;

  DisplayAnswer(this._text);

  @override
  Widget build(BuildContext context) {
    return Expanded(
      flex: 2,
      child: Material(
        color: Colors.greenAccent,
        child: Ink(
          padding: EdgeInsets.all(10.0),
          child: Center(
            child: Container(
              constraints: BoxConstraints.expand(),
              decoration: BoxDecoration(border: Border.all(color: Colors.black, width: 5.0), color: Colors.white),
              child: Text(_text,style: TextStyle(fontSize: 50.0), textAlign: TextAlign.center,),
            ),
          ),
        ),
      ),
    );
  }
}


class NumButtons extends StatelessWidget {
  final String _number;

  NumButtons(this._number);

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      onPressed: () {
        _calcText = _calcText + _number;
        print(_calcText);
        DisplayAnswer(_calcText);
      } ,
      child: Text(_number.toString(), style: TextStyle(fontSize: 30.0),),
      color: Colors.white
    );
  }
}

我想在DisplayAnswer的“文本”小部件中显示_calcText的值。我希望_calcText也随着单击其他按钮而改变,即;如果单击2,则文本应仅显示2,如果单击5,则应显示25

完整的代码在这里: https://drive.google.com/open?id=1C4MLAkjowloicbjBP_uV8BfpPzhz4Yxf

1 个答案:

答案 0 :(得分:0)

使用由StatelessWidget插入的Statefull小部件。 分配操作之后,在setState()函数上调用onPressed方法。它将使用新值构建您的小部件。

DisplayAnswer上,您必须创建一个函数来增大值,而不是将此函数作为参数传递给NumButtons

将回调Function传递到NumButtons,例如:

class NumButtons extends StatelessWidget {
  final String _number;
  final Function callback;
...