Flutter: проблемы с текстовым полем - PullRequest
0 голосов
/ 19 июня 2020

В моем приложении есть текстовое поле, которое выглядит следующим образом:

TextFormField(
           //maxLength: 02,
           textAlign: TextAlign.center,
           keyboardType: TextInputType.numberWithOptions(decimal: true),
           decoration: InputDecoration(
              labelText: textFieldInitVal.toString(),
              contentPadding: const EdgeInsets.all(0),
              border: OutlineInputBorder(
                  borderSide: BorderSide(
                  color: Colors.black54,
                  ),
                ),
                focusedBorder: OutlineInputBorder(
                   borderSide: BorderSide(
                     color: Colors.blue,
                     ),
                   ),
                ),
              //initialValue: textFieldInitVal.toString(),
              onChanged: (val) {
               if (int.parse(val) > 24) {
                  setState(() {
                    errorTxt = 'ERROR: Value cannot be more than 24 Hrs';
                  });
               } else {
                  setState(() {errorTxt = '';});
                  setState(() {value1 = int.parse(val).toDouble();});
                  //setState(() {value1 = double.parse(val);});
               }
             }
         ),

В приведенном выше фрагменте оба textFieldInitVal и value1 имеют тип double.

Я сталкиваются с двумя разными проблемами:

  1. Даже если я использую textAlign: TextAlign.center, я не могу центрировать labelText: textFieldInitVal.toString(). Метка идет и приклеивается к левому краю TextFormField. Добавление некоторого количества padding помогает, но оно также влияет на то, как размещается вводимый текст, поэтому я стараюсь этого избежать.

  2. В части onChanged: (val) {, когда я делаю print(val), я заметил, что TextFormField не принимает ничего после десятичного значения и, следовательно, при преобразовании в double из строки для val я получаю только целые числа.

Они выглядят как очень мелкие проблемы, но я не могу найти выход из этой ситуации. Что я делаю не так?

1 Ответ

1 голос
/ 19 июня 2020

Даже если я использую textAlign: TextAlign.center, я не могу центрировать labelText: textFieldInitVal.toString (). Метка идет и приклеивается к левому краю TextFormField. Добавление некоторого отступа помогает, но оно также влияет на то, как размещается вводимый текст, поэтому я стараюсь этого избежать.

Свойство textAlign выравнивает текст, который вы вводите внутри поля в в середине поля, но метка останется слева.


В onChanged: (val) {piece, когда я делаю print (val), я замечаю, что TextFormField не принимает ничего после десятичного значения и, следовательно, при преобразовании в double из строки для val я получаю только целые числа.

Что касается этого вопроса, вам нужно использовать класс double вместо int класс для получения десятичной дроби при преобразовании.

              onChanged: (val) {
               if (double.parse(val) > 24) {
                  setState(() {
                    errorTxt = 'ERROR: Value cannot be more than 24 Hrs';
                  });
               } else {
                 print(double.parse(val).toDouble());
                  setState(() {errorTxt = '';});
                  setState(() {value1 = int.parse(val).toDouble();});
               }
             }
...