我的if else代码没有按照我希望的方式运行。如果用户在控制器1、2、3、4中输入了一些内容,结果将根据这些输入进行计算和生成。但是,如果控制器1、2、3、4为空,则程序应该在控制器5、6为空的情况下执行else if语句。否则,最后如果所有6个输入都为空,则程序应该不返回任何结果。
import 'package:extended_math/extended_math.dart';
import 'package:flutter/material.dart';
class calculation extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _calculationState();
}
}
class _calculationState extends State<calculation> {
double Rzl = 0; // Real ZL
double Izl = 0; // Imaginary ZL
double Rzo = 0; // Real Zo
double Izo = 0; // Imaginary Zo
double t1 = 0;
double t2 = 0;
Complex zlvalue = Complex(re:0 , im:0);
Complex zovalue = Complex(re:0 , im:0);
Complex rcvalue = Complex(re:0 , im:0);
Complex infoText = Complex(re:0 , im:0);
TextEditingController controller1 = TextEditingController(text: '');
TextEditingController controller2 = TextEditingController(text: '');
TextEditingController controller3 = TextEditingController(text: '');
TextEditingController controller4 = TextEditingController(text: '');
TextEditingController controller5 = TextEditingController(text: '');
TextEditingController controller6 = TextEditingController(text: '');
@override
Widget build(BuildContext context) {
return Scaffold (
appBar: AppBar(
title: Text('Calculator'),
centerTitle: true,
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(left: 20.0, right: 20.0),
child: Column(
children: [
Row(
children: [
Expanded(
child: SizedBox(
height: 100,
child: Padding(
padding: const EdgeInsets.only(right: 10.0, top: 30.0),
child: TextField(
controller: controller1,
decoration: InputDecoration(
labelText: "Real ZL (ohms)",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20))
),
keyboardType: TextInputType.number,
),
),
),
),
Expanded(child:
SizedBox(
height: 100,
child: Padding(
padding: const EdgeInsets.only(left: 10.0, top: 30.0),
child: TextField(
controller: controller2,
decoration: InputDecoration(
labelText: "Imaginary ZL (johms)",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20))
),
keyboardType: TextInputType.number,
),
),
),
)
],
),
Row(
children: [
Expanded(
child: SizedBox(
height: 100,
child: Padding(
padding: const EdgeInsets.only(right: 10.0, top: 30.0),
child: TextField(
controller: controller3,
decoration: InputDecoration(
labelText: "Real Zo (ohms)",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20))
),
keyboardType: TextInputType.number,
),
),
),
),
Expanded(child:
SizedBox(
height: 100,
child: Padding(
padding: const EdgeInsets.only(left: 10.0, top: 30.0),
child: TextField(
controller: controller4,
decoration: InputDecoration(
labelText: "Imaginary Zo (johms)",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20))
),
keyboardType: TextInputType.number,
),
),
),
)
],
),
Row(
children: [
Expanded(
child: SizedBox(
height: 100,
child: Padding(
padding: const EdgeInsets.only(right: 10.0, top: 30.0),
child: TextField(
controller: controller5,
decoration: InputDecoration(
labelText: "test1",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20))
),
keyboardType: TextInputType.number,
),
),
),
),
Expanded(child:
SizedBox(
height: 100,
child: Padding(
padding: const EdgeInsets.only(left: 10.0, top: 30.0),
child: TextField(
controller: controller6,
decoration: InputDecoration(
labelText: "test2",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20))
),
keyboardType: TextInputType.number,
),
),
),
)
],
),
SizedBox(
height: 25.0,
),
ElevatedButton(
onPressed: () {
_validateUserInput(controller1.text);
_validateUserInput(controller2.text);
_validateUserInput(controller3.text);
_validateUserInput(controller4.text);
_validateUserInput(controller5.text);
_validateUserInput(controller6.text);
},
child: Text('Reflection Coefficient'),
),
SizedBox(
height: 25.0,
),
Text("Result: $infoText", style: TextStyle(color: Colors.red),
),
],
),
),
),
);
}
_validateUserInput(String input) {
if (controller1 != 0 && controller2 !=0 && controller3 !=0 && controller4 !=0 ) {
setState(() {
Rzl = double.parse(controller1.text);
Izl = double.parse(controller2.text);
Rzo = double.parse(controller3.text);
Izo = double.parse(controller4.text);
final zlvalue = Complex(re:Rzl , im:Izl) ;
final zovalue = Complex(re:Rzo , im:Izo) ;
final rcvalue = ((zlvalue)-(zovalue))/((zlvalue)+(zovalue));
infoText = rcvalue;
});
}
else if (controller5 !=0 && controller6 !=0 )
{
setState(() {
t1 = double.parse(controller5.text);
t2 = double.parse(controller6.text);
final rc1 = Complex(re:t1 , im:t2) ;
final rc2 = Complex(re:t1 , im:t2) ;
final rcvalue = rc1 + rc2;
infoText = rcvalue;
});
}
else
{
setState(() {
return;
});
}
}
}
1条答案
按热度按时间e4yzc0pl1#
检查
controller1 != 0
没有多大意义。控制器从来都不是0
。例如,您可能希望检查controller1.text != ''
,或者更好的方法是检查controller1.text.isNotEmpty