在 flutter 中创建具有可检索值的 table 类结构

creating table like structure with retrievable value in flutter

我正在创建一个包含 table 结构化视图的应用程序,在此视图中,用户 select 下拉列表中的值对应于行内容

我正在使用地图来操作行内容,

var data = {
  'CT': {
    's1': {
      1001: 3,
      1002: 6,
      1003: 3,
      1004: 3,
      1008: 4,
      1009: 2,
    },
  }
};


table格式应该是这样的 (为演示而硬编码)

并且当按下按钮时,我需要 table 中的所有数据。代码、信用以及 selected dropDownItem(String) 进行计算。 所有行的 DropDown 都是相同的,但我想知道 selecteditem 的代码和 credit

我尝试使用 DataTable

但不知道如何用地图操作行 也不知道如何检索(获取)table中的数据进行计算

我们需要创建一些列表来存储所需的数据(代码、成绩点和下拉列表的默认值

所以:

class _ViewScreenState extends State<ViewScreen> {
  List? selectedValues = []; // for storing the dropdown data
  List? creditsDetails = []; // for gradePoint
  List? codeDetais = []; // for code 

  @override
  void initState() {
    super.initState();
    creditsDetails = getPtsCodeDetails('CT', 's1')[0];
    codeDetais = getPtsCodeDetails('CT', 's1')[1];
    selectedValues = setSelectedValues(creditsDetails!.length); // creditDetails's  number of default value in a list
  }

getPtsCodeDetails 将数据从 map 更改为 list

List getPtsCodeDetails(String? dp, String? sem) {
  var ptscode = [];
  ptscode.add(data[dp]![sem]!.values.toList());
  ptscode.add(data[dp]![sem]!.keys.toList());
  return ptscode;
}

并且我们正在使用 ListView.builder 作为 table(尚未检查 DataTable) 我们基本上对 DropDowns 项目使用 selectedValues 并在 setState((){};) 中更改所选下拉列表的索引值,因此更改将反映在 ui 和

child: ListView.builder(
                physics: const NeverScrollableScrollPhysics(),
                shrinkWrap: true,
                scrollDirection: Axis.vertical,
                itemCount: creditsDetails!.length,
                itemBuilder: (context, index) {
                  return Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text(
                        codeDetais![index].toString(),
                        textAlign: TextAlign.right,
                      ),
                      Text(creditsDetails![index].toString()),
                      DropdownButton<String>(
                        value: selectedValues![index],
                        onChanged: (String? value) {
                          setState(() {
                            selectedValues![index] = value;
                          });
                        },
                        items: grades.map((String value) {
                          return DropdownMenuItem<String>(
                            alignment: Alignment.center,
                            value: value,
                            child: Text(
                              value,
                              textAlign: TextAlign.center,
                            ),
                          );
                        }).toList(),
                      ),
                    ],
                  );
                },
              ),

如果您有任何更好的解决方案,请告诉我

谢谢