У меня возникла проблема, когда я пытаюсь создать виджет с калькулятором с сохранением состояния (BMIState); Я не могу увидеть результат вычисления после вызова метода calc ().
Ожидаемое поведение - виджет Text, который вызывает result.toString()
, будет отображать результат вычисления на основе входных данных из два текстовых контроллера.
Однако даже после вызова calculate()
и изменения значения result
с использованием setState()
виджет «Текст» по-прежнему возвращает «результат» в виде toString своего инициализированного значения (то есть null
).
import 'package:flutter/material.dart';
class BMIPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => BMIState();
}
class BMIState extends State {
TextEditingController mController = TextEditingController();
TextEditingController kgController = TextEditingController();
double result = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
child: ListView(
children: <Widget>[
Column(
children: <Widget>[
TextField(
controller: mController,
keyboardType: TextInputType.number,
),
),
child: TextField(
controller: kgController,
keyboardType: TextInputType.number,),
),
FlatButton(
onPressed: () {
calculate();
},
),
Column(
children: <Widget>[
Text(
"BMI",
style: TextStyle(
fontSize: 40, fontWeight: FontWeight.w600, color: Colors.orangeAccent),
),
Text(
result.toString(),
style: TextStyle(
fontSize: 40, fontWeight: FontWeight.bold),
),
],
),
],
],
)));
}
void calculate() {
double height = double.tryParse(mController.text);
double weight = double.tryParse(kgController.text);
setState(() {
result = weight ~/ height * height;
});
}
}