Flutter 在按钮上的textfield窗口小部件中显示输出计算后的按钮点击颤振中的按钮点击
我有三个不同的小部件(文本字段),我需要一个用于输入,另外两个用于在单击按钮后显示计算结果。在本例中,一个文本字段以开尔文表示温度,另两个文本字段以华氏度和摄氏度表示结果。如果Celcius textfield接受输入,则这两个字段将在转换后显示结果。对不起,代码可能是脏的,但我是绿色的。每当在任一文本字段中进行输入时,我都会显示结果Flutter 在按钮上的textfield窗口小部件中显示输出计算后的按钮点击颤振中的按钮点击,flutter,widget,Flutter,Widget,我有三个不同的小部件(文本字段),我需要一个用于输入,另外两个用于在单击按钮后显示计算结果。在本例中,一个文本字段以开尔文表示温度,另两个文本字段以华氏度和摄氏度表示结果。如果Celcius textfield接受输入,则这两个字段将在转换后显示结果。对不起,代码可能是脏的,但我是绿色的。每当在任一文本字段中进行输入时,我都会显示结果 void main() { runApp(TemperatureCalculator()); } class TemperatureCalculator e
void main() {
runApp(TemperatureCalculator());
}
class TemperatureCalculator extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Temperature Calculator',
theme: ThemeData(
primaryColor: Colors.cyanAccent,
),
home: new TemperatureHome(),
);
}
}
class TemperatureHome extends StatefulWidget {
@override
createState() => TemperatureState();
}
class TemperatureState extends State<TemperatureHome> {
String result = '';
final temperatureMeasurer = ['Celcius', 'Kelvin', 'Farenheit'];
double formBorders = 6.0;
TextEditingController celciusController = TextEditingController();
TextEditingController farenheitController = TextEditingController();
TextEditingController kelvinController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Temperature Converter"),
backgroundColor: Colors.deepOrange,
),
body: Column(children: <Widget>[
Padding(
padding: EdgeInsets.only(top: formBorders, bottom: formBorders),
child: TextField(
controller: celciusController,
decoration: InputDecoration(
labelText: 'Temperature in Degrees Celcius',
hintText: 'e.g 25',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
keyboardType: TextInputType.number,
)),
Padding(
padding: EdgeInsets.only(top: formBorders, bottom: formBorders),
child: TextField(
controller: farenheitController,
decoration: InputDecoration(
labelText: 'Temperature in FarenHeit',
hintText: 'e.g 25',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
keyboardType: TextInputType.number,
)),
Padding(
padding: EdgeInsets.only(top: formBorders, bottom: formBorders),
child: TextField(
controller: kelvinController,
decoration: InputDecoration(
labelText: 'Temperature in Kelvin',
hintText: 'e.g 25',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
keyboardType: TextInputType.number,
),
),
Row(
children: <Widget>[
RaisedButton(
color: Theme.of(context).buttonColor,
textColor: Theme.of(context).primaryColorDark,
onPressed: () {
setState(() {
});
},
child: Text(
'Convert',
textScaleFactor: 1.5,
),
),
RaisedButton(
color: Theme.of(context).buttonColor,
textColor: Theme.of(context).primaryColorDark,
child: Text(
'Reset',
textScaleFactor: 1.5,
),
onPressed: () {
setState(() {
reset();
});
}),
],
),
]),
);
}
double converter() {
double celciusTemp = double.parse(celciusController.text);
double farenheitTemp = double.parse(farenheitController.text);
double kelvinTemp = double.parse(kelvinController.text);
double farenheitToCelsius = (farenheitTemp - 32) * 5 / 9;
double farenheitToKelvin = (farenheitTemp - 32) * 5 / 9 + 273.15;
double celciusToFarenheit = (celciusTemp * 9 / 5) + 32;
double celsiusToKelvin = celciusTemp + 273.15;
double kelvinToFarenheit = (kelvinTemp - 273.15) * 9 / 5 + 32;
double kelvinToCelcius = kelvinTemp - 273.15;
//if()
}
void reset() {
celciusController.text = '';
farenheitController.text = '';
kelvinController.text = '';
setState(() {
result = '';
});
}
}
`
void main(){
runApp(TemperatureCalculator());
}
类TemperatureCalculator扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“温度计算器”,
主题:主题数据(
primaryColor:Colors.cyancent,
),
主页:新温度主页(),
);
}
}
类TemperatureHome扩展StatefulWidget{
@凌驾
createState()=>TemperatureEstate();
}
类TemperatureState扩展状态{
字符串结果=“”;
最终温度测量仪=['Celcius','Kelvin','Farenheit'];
双formBorders=6.0;
TextEditingController celciusController=TextEditingController();
TextEditingController farenheitController=TextEditingController();
text编辑控制器kelvinController=text编辑控制器();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“温度转换器”),
背景颜色:Colors.deepOrange,
),
正文:列(子项:[
填充物(
填充:仅限边集(顶部:formBorders,底部:formBorders),
孩子:TextField(
控制器:Celcius控制器,
装饰:输入装饰(
labelText:“以摄氏度为单位的温度”,
hintText:‘例如25’,
边框:大纲输入边框(
边界半径:边界半径。圆形(5.0)),
键盘类型:TextInputType.number,
)),
填充物(
填充:仅限边集(顶部:formBorders,底部:formBorders),
孩子:TextField(
控制员:Farenheit控制员,
装饰:输入装饰(
labelText:“法伦海特的温度”,
hintText:‘例如25’,
边框:大纲输入边框(
边界半径:边界半径。圆形(5.0)),
键盘类型:TextInputType.number,
)),
填充物(
填充:仅限边集(顶部:formBorders,底部:formBorders),
孩子:TextField(
控制器:kelvinController,
装饰:输入装饰(
labelText:‘开尔文温度’,
hintText:‘例如25’,
边框:大纲输入边框(
边界半径:边界半径。圆形(5.0)),
键盘类型:TextInputType.number,
),
),
划船(
儿童:[
升起的按钮(
颜色:主题。背景。按钮颜色,
textColor:Theme.of(context).primaryColorDark,
已按下:(){
设置状态(){
});
},
子:文本(
“转换”,
textScaleFactor:1.5,
),
),
升起的按钮(
颜色:主题。背景。按钮颜色,
textColor:Theme.of(context).primaryColorDark,
子:文本(
“重置”,
textScaleFactor:1.5,
),
已按下:(){
设置状态(){
重置();
});
}),
],
),
]),
);
}
双转换器(){
double-celciusTemp=double.parse(celciusController.text);
double-farenheitmp=double.parse(farenheitController.text);
double kelvinTemp=double.parse(kelvinController.text);
双法伦海图=法伦海图-32)*5/9;
双法伦海特奥克文=(法伦海特姆-32)*5/9+273.15;
双Celcustofarenheit=(Celcustemp*9/5)+32;
双celsiusToKelvin=celciusTemp+273.15;
双开氏温度=(开氏温度-273.15)*9/5+32;
双开氏温度=开氏温度-273.15;
//if()
}
无效重置(){
celciusController.text='';
farenheitController.text='';
kelvinController.text='';
设置状态(){
结果='';
});
}
}
`
您可以在initState()中将侦听器添加到文本控制器。解决方案的一个简单示例如下所示:
@override
void dispose() {
celciusController.dispose();
farenheitController.dispose();
kelvinController.dispose();
super.dispose();
}
@override
void initState() {
celciusController.addListener((){
setState(() {
converter();
});
});
farenheitController.addListener((){
setState(() {
converter();
});
});
kelvinController.addListener((){
setState(() {
converter();
});
});
super.initState();
}
请阅读。中的更多内容。此解决方案将起作用,但您肯定需要一些代码更改,例如在转换器方法中处理空情况
void main() {
runApp(TemperatureCalculator());
}
class TemperatureCalculator extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Temperature Calculator',
theme: ThemeData(
primaryColor: Colors.cyanAccent,
),
home: new TemperatureHome(),
);
}
}
class TemperatureHome extends StatefulWidget {
@override
createState() => TemperatureState();
}
class TemperatureState extends State<TemperatureHome> {
String result = '';
final temperatureMeasurer = ['Celcius', 'Kelvin', 'Farenheit'];
double formBorders = 6.0;
TextEditingController celciusController = TextEditingController();
TextEditingController farenheitController = TextEditingController();
TextEditingController kelvinController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Temperature Converter"),
backgroundColor: Colors.deepOrange,
),
body: Column(children: <Widget>[
Padding(
padding: EdgeInsets.only(top: formBorders, bottom: formBorders),
child: TextField(
controller: celciusController,
decoration: InputDecoration(
labelText: 'Temperature in Degrees Celcius',
hintText: 'e.g 25',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
keyboardType: TextInputType.number,
)),
Padding(
padding: EdgeInsets.only(top: formBorders, bottom: formBorders),
child: TextField(
controller: farenheitController,
decoration: InputDecoration(
labelText: 'Temperature in FarenHeit',
hintText: 'e.g 25',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
keyboardType: TextInputType.number,
)),
Padding(
padding: EdgeInsets.only(top: formBorders, bottom: formBorders),
child: TextField(
controller: kelvinController,
decoration: InputDecoration(
labelText: 'Temperature in Kelvin',
hintText: 'e.g 25',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
keyboardType: TextInputType.number,
),
),
Row(
children: <Widget>[
RaisedButton(
color: Theme.of(context).buttonColor,
textColor: Theme.of(context).primaryColorDark,
onPressed: () {
setState((){
converter();
});
},
child: Text(
'Convert',
textScaleFactor: 1.5,
),
),
RaisedButton(
color: Theme.of(context).buttonColor,
textColor: Theme.of(context).primaryColorDark,
child: Text(
'Reset',
textScaleFactor: 1.5,
),
onPressed: () {
setState(() {
reset();
});
}),
],
),
]),
);
}
void converter() {
double celciusTemp = double.tryParse(celciusController.text);
double farenheitTemp = double.tryParse(farenheitController.text);
double kelvinTemp = double.tryParse(kelvinController.text);
double farenheitToCelsius = ((farenheitTemp ?? 0) - 32) * 5 / 9;
double farenheitToKelvin = ((farenheitTemp ?? 0) - 32) * 5 / 9 + 273.15;
double celciusToFarenheit = ((celciusTemp ?? 0) * 9 / 5) + 32;
double celsiusToKelvin = (celciusTemp ?? 0) + 273.15;
double kelvinToFarenheit = ((kelvinTemp ?? 0) - 273.15) * 9 / 5 + 32;
double kelvinToCelcius = (kelvinTemp ?? 0) - 273.15;
if(celciusController.text.isNotEmpty
&& double.tryParse(celciusController.text) != null){
farenheitController.text = celciusToFarenheit.toString();
kelvinController.text = celsiusToKelvin.toString();
}else if(farenheitController.text.isNotEmpty
&& double.tryParse(farenheitController.text) != null){
celciusController.text = farenheitToCelsius.toString();
kelvinController.text = farenheitToKelvin.toString();
}else if(kelvinController.text.isNotEmpty
&& double.tryParse(kelvinController.text) != null){
celciusController.text = kelvinToCelcius.toString();
farenheitController.text = kelvinToFarenheit.toString();
}
//if()
}
void reset() {
celciusController.text = '';
farenheitController.text = '';
kelvinController.text = '';
setState(() {
result = '';
});
}
}
void main(){
runApp(TemperatureCalculator());
}
类TemperatureCalculator扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“温度计算器”,
主题:主题数据(
primaryColor:Colors.cyancent,
),
主页:新温度主页(),
);
}
}
类TemperatureHome扩展StatefulWidget{
@凌驾
createState()=>TemperatureEstate();
}
类TemperatureState扩展状态{
字符串结果=“”;
最终温度测量仪=['Celcius','Kelvin','Farenheit'];
双formBorders=6.0;
TextEditingController celciusController=TextEditingController();
TextEditingController farenheitController=TextEditingController();
text编辑控制器kelvinController=text编辑控制器();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“温度转换器”),
背景颜色:颜色。
if (celciusController.text != null && celciusController.text.length > 0) {
farenheitController.text = (int.parse(celciusController.text)* 9 / 5) + 32;
kelvinController.text = int.parse(celciusController.text)+ 273.15;
}
else if (farenheitController.text != null && farenheitController.text.length > 0) {
celciusController.text = (int.parse(farenheitController.text)- 32) * 5 / 9;
kelvinController.text = (int.parse(farenheitController.text)- 32) * 5 / 9 + 273.15;
}
else{
....
}