Текстовое поле флаттера допускается в текстовом формате - PullRequest
0 голосов
/ 27 марта 2020

У меня есть два текстовых поля, одно из которых должно быть годом, поэтому я хочу разрешить вводить только цифры между 1900 и 2020 годами, второе - для рейтингов, и оно должно быть не более 9,9, и это может быть 5 или 5,5 и т. Д. c , Когда я использую приведенный ниже код, я могу получить 1800 или 3450 в поле года, а рейтинг может быть 123 или что-либо имеет 3 цифры. Есть ли способ ограничить их так, как я хочу?

Для лет;

new TextField(
                          controller: _disControllerF,
                          textAlign: TextAlign.center,
                          style: new TextStyle(
                              fontWeight: FontWeight.w400,
                              fontFamily: "SegoeUI",
                              fontStyle: FontStyle.normal,
                              fontSize: 16.0
                          ),
                          keyboardType: TextInputType.number,
                          inputFormatters:<TextInputFormatter>[
                            LengthLimitingTextInputFormatter(4),
                            WhitelistingTextInputFormatter.digitsOnly,
                          ],
                          decoration: InputDecoration(
                            border: new OutlineInputBorder(
                            ),
                            hintText: '1900',
                            hintStyle: TextStyle(
                                fontWeight: FontWeight.w400,
                                fontFamily: "SegoeUI",
                                fontStyle: FontStyle.normal,
                                fontSize: 16.0),
                            contentPadding: const EdgeInsets
                                .symmetric(
                                horizontal: 10.0),
                          ),),

Для рейтингов;

new TextField(
                  controller: _disControllerR,
                  textAlign: TextAlign.center,
                  style: new TextStyle(
                      fontWeight: FontWeight.w400,
                      fontFamily: "SegoeUI",
                      fontStyle: FontStyle.normal,
                      fontSize: 16.0
                  ),
                  keyboardType: TextInputType.number,
                  inputFormatters:<TextInputFormatter>[
                    LengthLimitingTextInputFormatter(3),
                    WhitelistingTextInputFormatter(RegExp("[1-9.]")),
                  ],
                  decoration: InputDecoration(
                    border: new OutlineInputBorder(
                    ),
                    hintText: '6.5',
                    hintStyle: TextStyle(
                        fontWeight: FontWeight.w400,
                        fontFamily: "SegoeUI",
                        fontStyle: FontStyle.normal,
                        fontSize: 16.0),
                    contentPadding: const EdgeInsets
                        .symmetric(
                        horizontal: 10.0),
                  ),),

1 Ответ

1 голос
/ 28 марта 2020

Используйте Форма виджет и TextFormField , чтобы вы могли валидатор в вашем TextFormField и добавить свое условие внутри. используя ключевой параметр в форме, вы можете проверить нажатием кнопки.

var formkey = GlobalKey<FormState>();

Form(
        key: formkey,
        child: Column(children: [
          TextFormField(
            //controller: _disControllerF,
            textAlign: TextAlign.center,
            style: new TextStyle(
                fontWeight: FontWeight.w400,
                fontFamily: "SegoeUI",
                fontStyle: FontStyle.normal,
                fontSize: 16.0),
            keyboardType: TextInputType.number,
            inputFormatters: <TextInputFormatter>[
              LengthLimitingTextInputFormatter(4),
              WhitelistingTextInputFormatter.digitsOnly,
            ],
            validator: (value) {
              String errorString;
              if (int.parse(value) < 2200 && int.parse(value) > 1800) {
              } else {
                errorString = "Enter value between 1800 and 220";
              }
              return errorString;
            },

            decoration: InputDecoration(
              border: new OutlineInputBorder(),
              hintText: '1900',
              hintStyle: TextStyle(
                  fontWeight: FontWeight.w400,
                  fontFamily: "SegoeUI",
                  fontStyle: FontStyle.normal,
                  fontSize: 16.0),
              contentPadding: const EdgeInsets.symmetric(horizontal: 10.0),
            ),
          ),
          TextFormField(
            //controller: _disControllerR,
            textAlign: TextAlign.center,
            style: new TextStyle(
                fontWeight: FontWeight.w400,
                fontFamily: "SegoeUI",
                fontStyle: FontStyle.normal,
                fontSize: 16.0),
            keyboardType: TextInputType.number,
            inputFormatters: <TextInputFormatter>[
              LengthLimitingTextInputFormatter(3),
              WhitelistingTextInputFormatter(RegExp("[1-9.]")),
            ],
            validator: (value) {
              String errorString;
              if (double.parse(value) > 9.9 || double.parse(value) < 5) {
                errorString = "Enter inbetween 5 to 9.9";
              }
              return errorString;
            },
            decoration: InputDecoration(
              border: new OutlineInputBorder(),
              hintText: '6.5',
              hintStyle: TextStyle(
                  fontWeight: FontWeight.w400,
                  fontFamily: "SegoeUI",
                  fontStyle: FontStyle.normal,
                  fontSize: 16.0),
              contentPadding: const EdgeInsets.symmetric(horizontal: 10.0),
            ),
          ),
          RaisedButton(onPressed: () {
            if (formkey.currentState.validate()) {}
          })
        ]))
...