Как показать теги, связанные с идентификатором элемента в flutter

#flutter #listview #tags

Вопрос:

Я создаю плитку расширения , и на ней отображаются дни с использованием ListView.builder и CheckboxListTile , а затем, если пользователь установит флажок, он отобразит add icon и при нажатии на него появится диалоговое окно, в котором пользователь должен ввести from time и to time , а затем нажать кнопку «Отправить», он отобразит тег с названием тех времен.

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

вот код плитки расширения (я создал пользовательскую)

 Listlt;CheckBoxListTileModelForTokengt; checkBoxListTileModelForToken =CheckBoxListTileModelForToken.getUsers(); Listlt;Stringgt; _timingTagListForToken=[];   customExpansionTile(context, "Token Distribution Time", true,  Icon(Icons.timer, color: HexColor("#5344ed")),   lt;Widgetgt;[  Container(  child: Row(  children: [  Expanded(  child: SizedBox(  height: MediaQuery.of(context).size.height * 0.45,  child: ListTile(  title: ListView.builder(  itemCount: checkBoxListTileModelForToken.length,  itemBuilder: (BuildContext context, int index) {  return new Card(  child: new Container(  padding: new EdgeInsets.all(10.0),  child: Column(  children: lt;Widgetgt;[  new CheckboxListTile(  controlAffinity:ListTileControlAffinity.leading,  activeColor: HexColor("#5344ed"),  dense: true,  title: new Text(  checkBoxListTileModelForToken[index].title,  style: TextStyle(  fontSize: 14,  fontWeight: FontWeight.w600,  letterSpacing: 0.5),  ),  value: checkBoxListTileModelForToken[index].isCheck?  true:false,  secondary: Container(  alignment:Alignment.centerRight,  height: MediaQuery.of(context).size.height*0.9,  width: MediaQuery.of(context).size.width *0.2,  child:checkBoxListTileModelForToken[index].isCheck ==true?  IconButton(  tooltip:"Pick Time",  onPressed: () {  _tokenTimeDialogue(  checkBoxListTileModelForToken[index].id);  },  icon: Icon(Icons.add,color: HexColor("#5344ed"),)  )  : null),  onChanged: (bool? val) {  itemChangeforToken(val!, index);  }),  SizedBox10(),  Wrap(  direction:Axis.horizontal,  children:[  Container(  child:checkBoxListTileModelForToken[index].isCheck? Tags(  itemCount: _timingTagListForToken.length,   itemBuilder: (int index){   return ItemTags(  key: Key(index.toString()),  activeColor:HexColor("#5344ed"),  index: index, // required  title: _timingTagListForToken[index],  textStyle: TextStyle( fontSize: 14, ),  combine: ItemTagsCombine.withTextBefore,    removeButton: ItemTagsRemoveButton(  backgroundColor:HexColor("#5344ed"),  onRemoved: (){   setState(() {  _timingTagListForToken.removeAt(index);  });  return true;  },  ),  onPressed: (item) =gt; print(item),  onLongPressed: (item) =gt; print(item),  );  },):Padding(  padding: const EdgeInsets.only(left: 70),  child:  Row(crossAxisAlignment: CrossAxisAlignment.center,   children: []))),  ])]),  ),  );  }),    ))),    ),  ],  ))  ]),  ],  );   

Дни занятий

 class CheckBoxListTileModelForToken {  int id;  String title;  bool isCheck;   CheckBoxListTileModelForToken({required this.id,required this.title, required this.isCheck});   static Listlt;CheckBoxListTileModelForTokengt; getUsers() {  return lt;CheckBoxListTileModelForTokengt;[  CheckBoxListTileModelForToken(id:1,title: "Monday", isCheck: true,),  CheckBoxListTileModelForToken(id:2,title: "Tue", isCheck: false),  CheckBoxListTileModelForToken(id:3,title: "Wed", isCheck: false),  CheckBoxListTileModelForToken(id:4,title: "Thu", isCheck: false),  CheckBoxListTileModelForToken(id:5,title: "Fri", isCheck: false),  CheckBoxListTileModelForToken(id:6,title: "Sat", isCheck: false),  CheckBoxListTileModelForToken(id:7,title: "Sun", isCheck: false),  ];  } }   

_tokenTimeDialogue (dialogue box where user have to enter from and to time)

 _tokenTimeDialogue(dynamic id) {   AlertDialog alert = AlertDialog(  scrollable: true,  insetPadding: EdgeInsets.symmetric(vertical: 50),  title: Text("Add timing of the day",  style: TextStyle(fontWeight: FontWeight.bold, color: HexColor("#5344ed"))),  content: Container(  child: SingleChildScrollView(  scrollDirection: Axis.vertical,  child: Column(children: lt;Widgetgt;[  textfieldforTimeDialogue(  context,  () async {  TimeOfDay? pickedTime = await showTimePicker(  initialTime: TimeOfDay.now(),  context: context,  );  if (pickedTime != null) {  // print(pickedTime.format(context));  // DateTime parsedTime = DateFormat.jm()  // .parse(pickedTime.format(context).toString());  // String formattedTime =  // DateFormat('HH:mm').format(parsedTime);  setState(() {  fromTimeForToken.text = pickedTime.format(context);  });  } else {  print("Time is not selected");  }  },  Icons.timer_off,  fromTimeForToken,  "From",  "From",  ),    SizedBox20(),  textfieldforTimeDialogue(  context,  () async {  FocusScope.of(context).unfocus();  TimeOfDay? pickedTime = await showTimePicker(  initialTime: TimeOfDay.now(),  context: context,  );  if (pickedTime != null) {  // DateTime parsedTime = DateFormat.jm()  // .parse(pickedTime.format(context).toString());  // String formattedTime =  // DateFormat('HH:mm').format(parsedTime);  setState(() {  toTimeForToken.text = pickedTime.format(context);  });  } else {  print("Time is not selected");  }  },  Icons.timer_off,  toTimeForToken,  "To",  "To",  ),  ]),  )),  actions: [  TextButton(  onPressed: () {  setState(() {  print("id " id.toString());  print(fromTimeForToken.text);  print(toTimeForToken.text);  _timingTagListForToken.add(fromTimeForToken.text "-" toTimeForToken.text);  print(_timingTagListForToken);  fromTimeForToken.text="";  toTimeForToken.text="";  });  Navigator.pop(context);  },  child: Text(  "Submit",  style: TextStyle(  fontWeight: FontWeight.bold,  color: HexColor("#5344ed"),  fontSize: 20),  ),  )  ]);  showDialog(  context: context,  builder: (BuildContext context) {  return alert;  },  );  }  
 setState(() {  checkBoxListTileModelForToken[index].isCheck = val;  });  }  

пожалуйста, помогите, как это сделать.