Flutter: массив валидатора Textform не работает - PullRequest
1 голос
/ 23 октября 2019

Я работаю над массивом текстовых полей. Массив может быть больше 50. Я хочу отправить массив значений на сервер. Проблема заключается в том, что когда я выполняю валидатор, он проверяет первые 8 в массиве, после этого сообщения об ошибке нет. Это тоже исчезает при прокрутке. Я разместил свой код ниже:

void validateAndSave() {
    final form = _formKey.currentState;
    if (form.validate()) {

      _formKey.currentState.save();
      print('Form is valid');
    }
    else {
    //  _formKey.currentState.
      print('form is invalid');
    }

  }

    Widget singleItemList(int index) {
    Item item = itemList[index];

    return Container(
      width: MediaQuery.of(context).size.width,
      decoration: BoxDecoration(
        color: Colors.white,
      ),
      child:
      Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [






          Expanded(

            child:Padding(
              padding: const EdgeInsets.fromLTRB(20, 10, 10, 20),


              child: new TextFormField(
               controller: _controller[index],

              keyboardType: TextInputType.number,




                //onSubmitted: (text) {
              //  takeNumber(text, item.id);
              //},


                validator: (value) {
                  if (value.isEmpty) return 'value is required';

                },



                decoration: new InputDecoration(

                  border: new OutlineInputBorder(
                      borderSide: new BorderSide(color: Colors.indigo)),




                  labelText: itemList[index].id,

                  suffixStyle: const TextStyle(color: Colors.red)
              ),


              ),
            ),
          ),


        ],
      ),


    );

  }

Пожалуйста, помогите мне. Заранее спасибо.

С уважением, Сатиш

1 Ответ

2 голосов
/ 23 октября 2019

Рассматривали ли вы заменить ListView.builder на Column?
Например:

child: SingleChildScrollView(
    child: Column(
      children: List.generate(itemList.length, (index) {
        if (itemList.isEmpty) {
          return CircularProgressIndicator();
        } else {
          return singleItemList(index);
        }
      })
    ) 
  )

Из ListView Документация :

Уничтожение
Когда дочерний элемент прокручивается из поля зрения,соответствующие поддерево, состояния и объекты рендеринга элементов уничтожаются. Новый дочерний элемент в той же позиции в списке будет лениво воссоздан вместе с новыми элементами, состояниями и объектами рендеринга при прокрутке назад.

...