We need to create some lists to store the needed data(code, gradepoints, and the default values of dropdown)
so:
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
}
the getPtsCodeDetails
would be like this for changing the data from map to 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;
}
and We are using the ListView.builder for the table(Didn't check with DataTable yet)
We are basically using the selectedValues
for DropDowns items and changing the value of the selected Dropdown's index's value in setState((){};)
so the change will reflect on ui also
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(),
),
],
);
},
),
If you have any better solution let me know
Thanks