Как отобразить текст в виджете "Текст" после нажатия кнопки 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;
...