Flutter 动态改变测量单位的按钮抖动
我试图创建一个按钮,当按下时,该按钮将在颤振测量单位(即厘米和英寸)之间循环回第四个。我可以从厘米到英寸,但是如果按下按钮并显示英寸,我不知道如何使文本动态地变回厘米。我知道我需要将if语句移出setState,但似乎无法让它正常工作。有什么建议吗Flutter 动态改变测量单位的按钮抖动,flutter,dart,setstate,Flutter,Dart,Setstate,我试图创建一个按钮,当按下时,该按钮将在颤振测量单位(即厘米和英寸)之间循环回第四个。我可以从厘米到英寸,但是如果按下按钮并显示英寸,我不知道如何使文本动态地变回厘米。我知道我需要将if语句移出setState,但似乎无法让它正常工作。有什么建议吗 import 'package:flutter/material.dart'; enum Units { cm, inches } class InputRow extends StatefulWidget { InputRow({
import 'package:flutter/material.dart';
enum Units { cm, inches }
class InputRow extends StatefulWidget {
InputRow({
this.inputParameter,
});
final String inputParameter;
@override
_InputRowState createState() => _InputRowState();
}
class _InputRowState extends State<InputRow> {
String Unit = 'cm';
Units selectedUnit;
@override
Widget build(BuildContext context) {
return Center(
child: Column(
children: <Widget>[
SizedBox(
height: 100,
),
Container(
constraints: BoxConstraints(maxWidth: 350),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Text(widget.inputParameter),
Flexible(
child: TextField(),
),
Text(Unit),
RaisedButton(
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(18.0),
side: BorderSide(color: Colors.red)),
color: Colors.deepPurple,
textColor: Colors.black,
onPressed: () {
setState(() {
selectedUnit == Units.inches ? Units.cm : Units.inches;
if (selectedUnit == Units.cm) {
Unit = 'cm';
} else {
Unit = 'inches';
}
});
},
),
],
),
)
],
));
}
}
导入“包装:颤振/材料.省道”;
枚举单位{cm,英寸}
类InputRow扩展StatefulWidget{
输入({
此.inputParameter,
});
最终字符串输入参数;
@凌驾
_InputRowState createState()=>\u InputRowState();
}
类_InputRowState扩展状态{
字符串单位='cm';
单位选择单位;
@凌驾
小部件构建(构建上下文){
返回中心(
子:列(
儿童:[
大小盒子(
身高:100,
),
容器(
约束:框约束(最大宽度:350),
孩子:排(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
文本(widget.inputParameter),
灵活的(
子项:TextField(),
),
文本(单位),
升起的按钮(
形状:新的RoundedRectangleBorder(
边界半径:新边界半径。圆形(18.0),
边:边框边(颜色:Colors.red)),
颜色:颜色。深紫色,
textColor:Colors.black,
已按下:(){
设置状态(){
选择单位==Units.inches?Units.cm:Units.inches;
if(selectedUnit==Units.cm){
单位=‘厘米’;
}否则{
单位=英寸;
}
});
},
),
],
),
)
],
));
}
}
将设置状态方法更改为
setState(() {
selectedUnit =
selectedUnit == Units.inches ? Units.cm : Units.inches;
if (selectedUnit == Units.cm) {
unit = 'cm';
} else {
unit = 'inches';
}
});
字符串单元
应存储在小部件的状态中。Chris,即使我将其移动到小部件的状态中(即在类_InputRowState下),它仍然不会重置。请发布更新的代码。更新的原始postselectedUnit
未初始化。此外,变量应使用lowerCamelCase
命名。