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