字符串列表<DataRow> DropdownButton 选择的第一个值显示在所有行中

问题描述 投票:0回答:1

我正在使用 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()))
             ]))
        )));
flutter
1个回答
0
投票

更新所有下拉按钮的原因是对所有

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(),
                  ),
                )
              ]),
            ),
          ),
        ),
      );
© www.soinside.com 2019 - 2024. All rights reserved.