проблема в том, что вы не получаете значение TextField в любом месте, и вы присваиваете значение вашего первого и второго значений, которое по умолчанию равно нулю.
Чтобы решить эту проблему, вы можете использовать Форма и TextFormField .я думаю, что следующий код поможет вам прояснить вашу идею.
вы также можете использовать проверку в TextFormField. Для проверки или проверки, является ли он нулевым или нет.
import 'package:flutter/material.dart';
import 'dart:math';
void main() {
runApp(MaterialApp(home: Calculator()));
}
class Calculator extends StatefulWidget {
@override
_CalculatorState createState() => _CalculatorState();
}
class _CalculatorState extends State<Calculator> {
double theResult, firstNum, secondNum;
final _form = GlobalKey<FormState>();
void divideTheNums() {
_form.currentState.save();
setState(() {
theResult = firstNum / secondNum;
});
}
void multiplyTheNums() {
_form.currentState.save();
setState(() {
theResult = firstNum * secondNum;
});
}
void addTheNums() {
_form.currentState.save();
setState(() {
theResult = firstNum + secondNum;
});
}
void subtractTheNums() {
_form.currentState.save();
setState(() {
theResult = firstNum - secondNum;
});
}
Widget build(BuildContext context) {
return new Scaffold(
resizeToAvoidBottomPadding: false,
appBar: AppBar(
backgroundColor: Colors.redAccent,
centerTitle: true,
title: Text(
"Calculator",
),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"OutPut:",
style: TextStyle(
fontSize: 25.0, fontWeight: FontWeight.w700),
),
Text(theResult==null?"":theResult.toString()),
Container(
margin: EdgeInsets.only(bottom: 30.0), child: Text(""))
],
),
Form(
key: _form,
child: Container(
margin: EdgeInsets.only(bottom: 20.0),
child: Column(
children: <Widget>[
TextFormField(
controller: TextEditingController(),
onSaved: (value){
firstNum = double.parse(value);
},
keyboardType: TextInputType.numberWithOptions(),
decoration: InputDecoration(
hintText: "Enter First Number:",
border: OutlineInputBorder()),
),
Padding(padding: EdgeInsets.only(top: 10.0),),
TextFormField(
controller: TextEditingController(),
onSaved: (value){
secondNum = double.parse(value);
},
keyboardType: TextInputType.numberWithOptions(),
decoration: InputDecoration(
hintText: "Enter Second Number:",
border: OutlineInputBorder()),
),
],
),
),
),
Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
margin: EdgeInsets.only(right: 20.0),
child: RaisedButton(
color: Colors.redAccent,
onPressed: divideTheNums,
child: Text(
"/",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
),
Container(
margin: EdgeInsets.only(),
child: RaisedButton(
color: Colors.redAccent,
onPressed: multiplyTheNums,
child: Text(
"*",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
margin: EdgeInsets.only(right: 20.0, top: 20.0),
child: RaisedButton(
color: Colors.redAccent,
highlightColor: Colors.white,
onPressed: subtractTheNums,
child: Text(
"-",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
),
Container(
margin: EdgeInsets.only(top: 20.0),
child: RaisedButton(
color: Colors.redAccent,
onPressed: addTheNums,
child: Text(
"+",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
)
],
)
],
),
),
),
),
);
}
}