动态改变计量单位的按钮,翩翩起舞。

问题描述 投票:-1回答:1

我正试图创建一个按钮,当按下时,将在测量单位(即厘米和英寸)之间循环往复。我能够从厘米到英寸,但不知道如何在按钮被按下并显示英寸的情况下,使文本动态地变回厘米。我知道我需要把我的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';
                    }
                  });
                },
              ),
            ],
          ),
        )
      ],
    ));
  }
}

flutter dart setstate
1个回答
-1
投票

将你的setState方法改为

setState(() {
                    selectedUnit =
                        selectedUnit == Units.inches ? Units.cm : Units.inches;

                    if (selectedUnit == Units.cm) {
                      unit = 'cm';
                    } else {
                      unit = 'inches';
                    }
                  });
© www.soinside.com 2019 - 2024. All rights reserved.