Flutter 动态改变测量单位的按钮抖动

Flutter 动态改变测量单位的按钮抖动,flutter,dart,setstate,Flutter,Dart,Setstate,我试图创建一个按钮,当按下时,该按钮将在颤振测量单位(即厘米和英寸)之间循环回第四个。我可以从厘米到英寸,但是如果按下按钮并显示英寸,我不知道如何使文本动态地变回厘米。我知道我需要将if语句移出setState,但似乎无法让它正常工作。有什么建议吗 import 'package:flutter/material.dart'; enum Units { cm, inches } class InputRow extends StatefulWidget { InputRow({

我试图创建一个按钮,当按下时,该按钮将在颤振测量单位(即厘米和英寸)之间循环回第四个。我可以从厘米到英寸,但是如果按下按钮并显示英寸,我不知道如何使文本动态地变回厘米。我知道我需要将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';
                    }
                  });
                },
              ),
            ],
          ),
        )
      ],
    ));
  }
}

导入“包装:颤振/材料.省道”;
枚举单位{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下),它仍然不会重置。请发布更新的代码。更新的原始post
selectedUnit
未初始化。此外,变量应使用
lowerCamelCase
命名。