错误:参数类型“double?”不能分配给参数类型“num”

时间:2021-07-27 16:39:02

标签: android flutter android-studio dart textfield

我正在尝试将一个单位值从一个转换为另一个。 (公斤 --> 克)作为。转换值时出现以下错误。

我在另一个页面有一张地图。如下

final Map<String,double> changes= {
    "gram-kilogram": 0.01,
    "kilogram-gram": 1000,
    "kilogram-kilogram": 1,
    "gram-gram": 1,
  };

以及主页容器中的代码,

  String _val1 = "Kilogram";
  String _val2 = "Kilogram";
  TextEditingController _controller1 = TextEditingController();
  TextEditingController _controller2 = TextEditingController();

  initState(){
    super.initState();
    _controller1=TextEditingController();
    _controller2=TextEditingController();
  }
  dispose(){
    super.dispose();
    _controller1.dispose();
    _controller2.dispose();
  }

并且有 2 个文本字段和 2 个下拉按钮。

TextField(
                  controller: _controller1,
                  onChanged: (text) {
                    if(text.isEmpty)
                      _controller2.text = "0.0";
                    else
                     _controller2.text = (double.parse(text)*changes[_val1+"-"+_val2]).toString();
                      },
                  ),

DropdownButton<String>(
                  items: <DropdownMenuItem<String>>[
                    DropdownMenuItem(child: Text("Kilogram"), value: "Kilogram", onTap: () {
                      _val1 = _val1;

                    },),
                    DropdownMenuItem(child: Text("Gram"),
                      value: "Gram",
                      onTap: () {
                        _val1 = _val1;
                      },),
                  ],
                  onChanged: (value) {
                    setState(()  {
                      this._val1 = value!;
                    });
                  },
                  value: _val1,
                ),

我收到了主题中提到的错误。它发生在这一行。 _controller2.text = (double.parse(text)changes[_val1+"-"+_val2]).toString(); 和帮助将不胜感激。

Screen image

1 个答案:

答案 0 :(得分:0)

您向 Map 声明了错误的值

 Map<String, double> changes= new HashMap<>();

 changes.put("gram-kilogram", 0.01);
 changes.put("kilogram-gram", 1000);
 changes.put("kilogram-kilogram", 1);
 changes.put("gram-gram", 1);