who to iterate mixed List and Map and object in dart and flutter

Viewed 42

how can i iterate bello list and show it in my structure?

List courses = [
  {'course 1':{'p':['course 0'],'need':[],'v':3}},
  {'course 2':{'p':[],'need':['course 1','course 0'],'v':2}},
  {'course 3':{'p':['course 1'],'need':[],'v':2}},
];


@override
  Widget build(BuildContext context) {
    return Container(

      child: Column(children: [
      ...courses.map((e) => Container(
        color: Colors.amber,
        width: 200,
        height: 40,
        margin: EdgeInsets.all(4),
        child: Column(

        children: [
          Text(e[0],style: TextStyle(color: Colors.white),),
          Text(e['p'],style: TextStyle(color: Colors.grey),),
          Text(e['need'],style: TextStyle(color: Colors.grey),),
          Text(e['v'],style: TextStyle(color: Colors.grey),),

        ],
      ),)),

    ],),);
  }

i want my result be like this:

course 1 : p: course 0 / need: null

course 2 : p: null / need: course 1 + course 0

. . .

thanks .

2 Answers

Maybe something like this is what you want:

@override
Widget build(BuildContext context) {
  return Container(
    child: Column(children: [
      ...courses.map((e) {
        final entry = e.entries.first;
        return Container(
        color: Colors.amber,
        width: 200,
        margin: EdgeInsets.all(4),
        child: Column(
          children: [
            Text(entry.key,style: TextStyle(color: Colors.white),),
            Text(entry.value['p'].length == 0 ? 'null' : entry.value['p'].join(' + '),style: TextStyle(color: Colors.grey),),
            Text(entry.value['need'].length == 0 ? 'null' : entry.value['need'].join(' + '),style: TextStyle(color: Colors.grey),),
            Text(entry.value['v'].toString(),style: TextStyle(color: Colors.grey),),
          ],
        ),);}),

    ],),);
}

You should propably use a class instead of a Map. List make more sense and is easier to deal with now and later on.

Course class :

class Course
{
  final String name;
  final List<String> p;
  final List<String> need;
  final int v;
  
  Course(this.name, this.p, this.need, this.v);
} 

Builder :

   List courses = [
        Course('course 1',['course 0'],[],3),
        Course('course 2',[],['course 1','course 0'],2),
        Course('course 3',['course 1'],[],2),
      ];

    @override
    Widget build(BuildContext context) {
    return Container(

      child: Column(children: [
      ...courses.map((course) => Container(
        color: Colors.amber,
        width: 200,
        height: 40,
        margin: EdgeInsets.all(4),
        child: Column(

        children: [
          Text(course.name,style: TextStyle(color: Colors.white),),
          Text(course.p.join(","),style: TextStyle(color: Colors.grey),),
          Text(course.need.join(","),style: TextStyle(color: Colors.grey),),
          Text(course.v,style: TextStyle(color: Colors.grey),),

        ],
      ),)),

    ],),);
  }
Related