我正在使用 flutter 数据表,并且我有一个字符串列表。
如果您的列表计数为 5,那么您将看到五行。
每行包含一个下拉菜单。
在下拉列表中选择一个值后,问题是所选值显示在所有 5 行中。这不是正确的行为。
这是b/c我没有使用int类型的索引。
我不知道如何合并索引,以便每一行都会显示不同的选定列表项。
我读到我应该使用这样的东西:myList.indexOf(element)。
使用indexOf,我不能使用int索引b/c元素是字符串。
请您提出您的建议。
谢谢你
我有以下代码 - 该代码仅显示第一个列表项 a1。
static List<String> myList=['a1','a2','a3','a4','a5'];
int getlistRowsCount(){
return myList.length();
}
Widget mytable = Container(child: SizedBox(height: 500, child:DataTable(columns: [
DataColumn(label: Text('My heading')),
],
rows: List<DataRow>.generate(getlistRowsCount(),(index) => DataRow(cells: [
DataCell(DropdownButton<String>(value: dropdownvalue,onChanged: (String? newValue) {
setState(() {
dropdownvalue = newValue!;
});
},
items: myList.map<DropdownMenuItem<String>>((String xyz) {
return DropdownMenuItem<String>(value: xyz,child: Text(xyz));
}).toList()))
]))
)));
更新所有下拉按钮的原因是对所有
value: dropdownvalue
使用单一值。 要控制特定项目,您需要使用基于您的代码片段的列表。
List<String> myList = ['a1', 'a2', 'a3', 'a4', 'a5'];
int get itemCount => myList.length;
///setting null value initially
late List<String?> selectedValue = List.generate(myList.length, (_) => null);
/// use method instead of variable for context consistency
Widget mytable() => Container(
child: SizedBox(
height: 500,
child: DataTable(
columns: const [
DataColumn(label: Text('My heading')),
],
rows: List<DataRow>.generate(
itemCount,
(index) => DataRow(cells: [
DataCell(
DropdownButton<String>(
value: selectedValue[index],
onChanged: (String? newValue) {
selectedValue[index] = newValue;//updating here
setState(() {});
},
items: myList.map<DropdownMenuItem<String>>(
(String xyz) {
return DropdownMenuItem<String>(value: xyz, child: Text(xyz));
},
).toList(),
),
)
]),
),
),
),
);