Как отобразить текст в виджете "Текст" после нажатия кнопки flatButton?

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

Все мои классы не имеют состояния, за исключением первого класса 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 ответ

Решение

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

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

Пройти обратный звонок Function в NumButtons, лайк:

class NumButtons extends StatelessWidget {
  final String _number;
  final Function callback;
...
Другие вопросы по тегам