Текстовое поле внутри вложенного представления списка

#android #ios #flutter #cross-platform

#Android #iOS #трепетать #кросс-платформенный

Вопрос:

У меня есть элемент управления ListView внутри него у меня есть GridView в который содержит текстовое поле, чтобы добавить какой-то комментарий ,Моя цель-получить текст из текстового поля и сохранить в списокlt;Listlt; Object=»»gt;теперь, когда я пытаюсь прочитать данные insize вложенный ListView с помощью событий onchanged() но я получаю ту же дату для каждого элемента в родительском элементе управления ListView. Вот мой код.

 child: Container(  margin: EdgeInsets.fromLTRB(16, 16, 16, 16),  child: ListView.separated(  padding: EdgeInsets.all(0),  shrinkWrap: true,  itemBuilder: (BuildContext context, int parentindex) {  return Column(  crossAxisAlignment: CrossAxisAlignment.start,  children: [  Text('Set ${parentindex   1}',  style: TextStyle(  fontSize: 20,  color: textColor,  fontStyle: FontStyle.normal,  fontFamily: 'sf_pro_display',  )),  SizedBox(  height: 5,  ),  GridView.builder(  key: UniqueKey(),  padding: EdgeInsets.all(0),  scrollDirection: Axis.vertical,  physics: const ClampingScrollPhysics(),  shrinkWrap: true,  gridDelegate:  const SliverGridDelegateWithFixedCrossAxisCount(  crossAxisCount: 2,  mainAxisExtent: 40,  mainAxisSpacing: 8,  crossAxisSpacing: 8),  itemBuilder: (BuildContext context, int index) {  // print('parent $parentindex');  // print('item $index');  return textItem(parentindex, index);  },  itemCount: widget.workoutExercise  .intensityPart[parentindex].length),  SizedBox(  height: 10,  ),  ],  );  },  separatorBuilder: (BuildContext context, int index) =gt;  const Divider(),  itemCount: widget.workoutExercise.intensityPart.length),  ),  ),  

Виджет текстового поля

 Widget textItem(int parentindex, int index) {   return Container(  key: ValueKey('$parentindex$index'),  decoration: BoxDecoration(  color: searchBoxColor,  borderRadius: BorderRadius.all(Radius.circular(5)),  ),  child: Padding(  padding: const EdgeInsets.all(8.0),  child: Row(  mainAxisAlignment: MainAxisAlignment.spaceEvenly,  crossAxisAlignment: CrossAxisAlignment.center,  children: [  Text(  widget.workoutExercise.intensityPart[parentindex][index]  ['title'],  style: TextStyle(  fontSize: 16,  color: darkGreyColor,  fontStyle: FontStyle.normal,  fontFamily: 'sf_pro_display',  )),  Text(" : ",  style: TextStyle(  fontSize: 16,  color: darkGreyColor,  fontStyle: FontStyle.normal,  fontFamily: 'sf_pro_display',  )),  Expanded(  child:TextField(  key: UniqueKey(),  // controller: _controllers[parentindex][index],  maxLines: 1,  minLines: 1,  textAlignVertical: TextAlignVertical.center,  onChanged: (text) {  writeData(parentindex, index, text);  },  style: TextStyle(fontSize: 20, color: textColor),  keyboardType: TextInputType.number,  decoration: InputDecoration(  hintText: widget.workoutExercise.intensityPart[parentindex]  [index]['value'],  hintStyle: TextStyle(color: darkGreyColor),  border: InputBorder.none),  )  ),  ],  ),  ),  );  }   

This is how i store my data

 void writeData(int parentindex, int index, String text) {  print('parent $parentindex');  print('item $index');  print('item $text');  widget.workoutExercise.intensityPart[parentindex][index]['value'] = text;  widget.workoutExercise.intensityPart.forEach((element) {  element.forEach((element) {  element.forEach((key, value) {  print(key);  print(value);  });  });  });  }