ошибка: Тип аргумента «double?» не может быть присвоен типу параметра «num»

#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(); и помощь была бы признательна.

Изображение на экране

Комментарии:

1. Можете ли вы упомянуть, используя «_controller2.text = (двойной анализ(текст)изменений[_val1 «-» _val2]). toString();» что вы хотите в качестве желаемого результата…??

2. @LaKiThakare Итак, допустим, пользователь выбирает Килограмм в левом меню и Грамм в правом меню. Затем, когда пользователь вводит 1 в левом текстовом поле, я хочу, чтобы правое текстовое поле автоматически менялось на 1000.

3. Ладно, я понял твою проблему….. Вместо синтаксического анализа попробуйте использовать tryparse… т. е. double. Попробуйте проанализировать(текст) * …. И Т.д.

4. @LaKiThakare Тогда я получу ту же ошибку и ошибку: оператор » * «не может быть вызван безоговорочно, потому что приемник может быть «нулевым». Эта ошибка тоже. Я добавил весь код, если это поможет — codeshare.io/vwAzZk

5. Ладно, я понял твою проблему….. Вместо разбора попробуйте использовать TryParse и позаботьтесь о безопасности null… т. е. double. Попробуйте проанализировать(текст) ?? 0.0 * …. И Т.д. Это должно сработать … забыл упомянуть о нулевой безопасности…

Ответ №1:

Вы объявили неверное значение для сопоставления

  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);