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