#flutter
Вопрос:
Я использовал карту для отображения всех элементов списка, классифицированных по категориям.Однако, когда я изменяю раскрывающуюся кнопку первого элемента, значение раскрывающейся кнопки другого элемента также изменяется, что я должен сделать, чтобы гарантировать, что значение раскрывающейся кнопки другого элемента не изменится при изменении значения раскрывающейся кнопки первого элемента?
List filteredproducts = [];
for (int i = 0; i < products.length; i ) {
if (products[i]['index'] == getindex) {
filteredproducts.add(
Container(
height: 380,
child: ListTile(
title: Container(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
setState(() {});
},
child: Text(
products[i]['name'].toString(),
style: TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold,
color: Colors.orange,
),
),
),
Container(
width: 120,
decoration: BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius.all(Radius.circular(25.0)),
),
child: DropdownButtonHideUnderline(
child: ButtonTheme(
alignedDropdown: true,
child: DropdownButton(
isExpanded: true,
value: getval,
items: [
DropdownMenuItem(
child: Center(
child: InkWell(
onTap: () {
setState(() {});
},
child: Text(
'請選擇:',
textAlign: TextAlign.center,
),
),
),
value: 0,
onTap: (() {})),
DropdownMenuItem(
child: Center(
child: Text(
'${choice[0]}',
textAlign: TextAlign.center,
),
),
value: 1,
onTap: (() {}),
),
DropdownMenuItem(
child: Center(
child: Text(
'${choice[1]}',
textAlign: TextAlign.center,
),
),
value: 2,
onTap: (() {
setState(() {
//_display = true;
});
}),
),
DropdownMenuItem(
child: Center(
child: Text(
'${choice[2]}',
textAlign: TextAlign.center,
),
),
value: 3,
onTap: (() {
setState(() {
//_display = false;
});
}),
),
],
onChanged: (value) => setState(() {
getval = value as int?;
}),
),
),
),
),
],
),
Visibility(
visible: _display,
child: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'缺善地方',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10),
Container(
padding: EdgeInsets.all(12),
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(25.0)),
),
child: TextFormField(
maxLines: 6,
decoration: InputDecoration(
contentPadding:
EdgeInsets.fromLTRB(20, 5, 5, 5),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(30.0),
borderSide: BorderSide.none,
),
fillColor: Colors.white,
filled: true,
hintText: '點擊這裡添加:',
),
),
),
SizedBox(height: 10),
Text(
'改善安排',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10),
Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(25.0)),
),
child: TextFormField(
decoration: InputDecoration(
suffixIcon: Icon(Icons.calendar_today),
contentPadding:
EdgeInsets.fromLTRB(20, 5, 5, 5),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(30.0),
borderSide: BorderSide.none,
),
fillColor: Colors.white,
filled: true,
hintText: '負責人:',
),
),
),
],
),
],
),
),
],
),
),
),
),
);
}
}
return Container(
height: filteredproducts.length * 380,
child: Column(
children: [
...filteredproducts.map(
(item) => Container(
child: item,
),
),
],
),
);
}
Вот формат списка товаров(всего 56 наименований в 9 категориях)
List products =[{"id": 1,
"name": "木板路",
"category": "進出途徑",
"index": 1,
}]
для выбора списка
List choices = ['Y','N','NA'];