0

I want to create a list joining with unique terms and different terms so that I can use this value in Table form base on terms. Below is the response i am getting

{
  "message": "Number of records fetched is 1",
  "data": [
    
    {
      "roll no": "3",
      "studentName": "Anil Kapoor",
      "detail": [
        {
          "marksObtained": 0,
          "title": "Annual Exams English ( 100 )",
          "term": "Annual Exams",
          "subjectName": "English",
          "maxMarks": 100,
          "minMarks": 33,
          "grade": "D",
        
        },
        {
          "marksObtained": 22,
          "title": "Annual Exams Hindi ( 100 )",
          "term": "Annual Exams",
          "subjectName": "Hindi",
          "maxMarks": 100,
          "minMarks": 33,
          "grade": "D",
        
        },
        {
          "marksObtained": 55,
          "title": "Annual Exams Marathi ( 100 )",
          "term": "Annual Exams",
          "subjectName": "Marathi",
          "maxMarks": 100,
          "minMarks": 33,
          "grade": "C+",
          
        },
        {
          "marksObtained": 89,
          "title": "Open Book Test 1 Hindi ( 150 )",
          "term": "Open Book Test 1",
          "subjectName": "Hindi",
          "maxMarks": 150,
          "minMarks": 100,
          "grade": "A",
       
        },
        {
          "marksObtained": 90,
          "title": "Annual Exams Gujarati ( 100 )",
          "term": "Annual Exams",
          "subjectName": "Gujarati",
          "maxMarks": 100,
          "minMarks": 33,
          "grade": "A+",
        
        },
        {
          "marksObtained": 95,
          "title": "Open Book Test 1 English ( 100 )",
          "term": "Open Book Test 1",
          "subjectName": "English",
          "maxMarks": 100,
          "minMarks": 50,
          "grade": "A+",
         
        },
        {
          "marksObtained": 98,
          "title": "Open Book Test 1 Gujarati ( 400 )",
          "term": "Open Book Test 1",
          "subjectName": "Gujarati",
          "maxMarks": 400,
          "minMarks": 10,
          "grade": "A+",
         
        }
      ],
      "totalMarks": 1050,
      "totalObtained": 449,
      "percentage": 42,
      "grade": "C",
      "session": "2022-2023"
    }
  ],
  "totalRecords": 0,
  "smsCredit": null
}

I want to get a single list based on terms i.e annual exam,open book test etc.like

[[object list of annual terms],[object list of open book exams]] and so on

Zuhair
  • 1
  • 3

1 Answers1

0

Use package collection , groupBy creates a dictionary from the array by grouping the key: For more detail check this answer: link

Example: [note: Avoid force unwrapping, it is for testing]

const jsonStr =
    '{"message":"Numberofrecordsfetchedis1","data":[{"rollno":"3","studentName":"AnilKapoor","detail":[{"marksObtained":0,"title":"AnnualExamsEnglish(100)","term":"AnnualExams","subjectName":"English","maxMarks":100,"minMarks":33,"grade":"D"},{"marksObtained":22,"title":"AnnualExamsHindi(100)","term":"AnnualExams","subjectName":"Hindi","maxMarks":100,"minMarks":33,"grade":"D"},{"marksObtained":55,"title":"AnnualExamsMarathi(100)","term":"AnnualExams","subjectName":"Marathi","maxMarks":100,"minMarks":33,"grade":"C+"},{"marksObtained":89,"title":"OpenBookTest1Hindi(150)","term":"OpenBookTest1","subjectName":"Hindi","maxMarks":150,"minMarks":100,"grade":"A"},{"marksObtained":90,"title":"AnnualExamsGujarati(100)","term":"AnnualExams","subjectName":"Gujarati","maxMarks":100,"minMarks":33,"grade":"A+"},{"marksObtained":95,"title":"OpenBookTest1English(100)","term":"OpenBookTest1","subjectName":"English","maxMarks":100,"minMarks":50,"grade":"A+"},{"marksObtained":98,"title":"OpenBookTest1Gujarati(400)","term":"OpenBookTest1","subjectName":"Gujarati","maxMarks":400,"minMarks":10,"grade":"A+"}],"totalMarks":1050,"totalObtained":449,"percentage":42,"grade":"C","session":"2022-2023"}],"totalRecords":0,"smsCredit":null}';

Employee emp = Employee.fromJson(json.decode(jsonStr));
var newList = groupBy(emp.data?.first.detail! as Iterable<Detail>,
    (Detail detail) => detail.term);
var finalList = newList.values;
RTXGamer
  • 3,215
  • 6
  • 20
  • 29