Как отобразить текст в виджете «Текст» после нажатия кнопки flatButton? - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь создать приложение калькулятора, используя флаттер, где вместо ввода через клавиатуру я хочу вводить через некоторые кнопки.Проблема возникает, когда я нажимаю кнопку, но она не отображает соответствующие данные в виджете «Текст» выше.

Все мои классы не имеют состояния, кроме первого класса MyApp, который является Stateful.

Я попытался создать общую переменную вне всех классов и использовать ее для переноса текста из класса кнопки в класс отображения, но это не сработало.

Общая переменная «_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
    );
  }
}

Я хочу отобразить значение _calcText в виджете «Текст» DisplayAnswer.Я хочу, чтобы _calcText также менялся при нажатии других кнопок, т.е.если нажать 2, текст должен отображать только 2, если щелкнуть 5 после этого, он должен отобразить 25

Полный код здесь: https://drive.google.com/open?id=1C4MLAkjowloicbjBP_uV8BfpPzhz4Yxf

1 Ответ

0 голосов
/ 24 апреля 2019

Использовать виджет Statefull, встроенный в StatelessWidget. Вызовите метод setState() для функции onPressed после операции добавления. Он создаст ваш виджет с новым значением.

В DisplayAnswer необходимо создать функцию для увеличения значения, а затем передать эту функцию в качестве параметра в NumButtons.

Передать обратный вызов Function на NumButtons, например:

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