动态更改度量单位的按钮会颤动
Button that change units of measure dynamically flutter
我正在尝试创建一个按钮,当按下该按钮时,它会在颤振中在测量单位(即厘米和英寸)之间来回循环。我可以从厘米到英寸,但无法弄清楚如果按下按钮并显示英寸,如何使文本动态变回厘米。我知道我需要将我的 if 语句移出我的 setState 但似乎无法让它正常工作。有什么建议吗?
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';
}
});
},
),
],
),
)
],
));
}
}
将您的 setState 方法更改为
setState(() {
selectedUnit =
selectedUnit == Units.inches ? Units.cm : Units.inches;
if (selectedUnit == Units.cm) {
unit = 'cm';
} else {
unit = 'inches';
}
});
我正在尝试创建一个按钮,当按下该按钮时,它会在颤振中在测量单位(即厘米和英寸)之间来回循环。我可以从厘米到英寸,但无法弄清楚如果按下按钮并显示英寸,如何使文本动态变回厘米。我知道我需要将我的 if 语句移出我的 setState 但似乎无法让它正常工作。有什么建议吗?
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';
}
});
},
),
],
),
)
],
));
}
}
将您的 setState 方法更改为
setState(() {
selectedUnit =
selectedUnit == Units.inches ? Units.cm : Units.inches;
if (selectedUnit == Units.cm) {
unit = 'cm';
} else {
unit = 'inches';
}
});