List of Maps

1. Create a List of Maps

A List of Maps is simply a list where each item is a Map. Here is an example with multiple student objects.

void main() {
  // List of Maps: Collection of Student Objects
  List<Map<String, dynamic>> students = [
    {"id": 1, "name": "John Doe", "age": 20, "grade": "A"},
    {"id": 2, "name": "Jane Smith", "age": 22, "grade": "B"},
    {"id": 3, "name": "Alice Brown", "age": 21, "grade": "C"},
  ];

  // Print all students
  print("List of Students:");
  for (var student in students) {
    print(student);
  }
}

Output:

List of Students:
{id: 1, name: John Doe, age: 20, grade: A}
{id: 2, name: Jane Smith, age: 22, grade: B}
{id: 3, name: Alice Brown, age: 21, grade: C}

2. Add (Append) a New Map to the List

You can use the .add() method to append a new Map object to the list.

void main() {
  List<Map<String, dynamic>> students = [
    {"id": 1, "name": "John Doe", "age": 20, "grade": "A"},
    {"id": 2, "name": "Jane Smith", "age": 22, "grade": "B"},
  ];

  // Append a new student
  students.add({"id": 3, "name": "Bob White", "age": 23, "grade": "A+"});
  print("After Adding a New Student:");

  for (var student in students) {
    print(student);
  }
}

Output:

After Adding a New Student:
{id: 1, name: John Doe, age: 20, grade: A}
{id: 2, name: Jane Smith, age: 22, grade: B}
{id: 3, name: Bob White, age: 23, grade: A+}

3. Remove a Specific Map by ID

To remove an object (student) from the list, use removeWhere() to filter based on a condition.

void main() {
  List<Map<String, dynamic>> students = [
    {"id": 1, "name": "John Doe", "age": 20, "grade": "A"},
    {"id": 2, "name": "Jane Smith", "age": 22, "grade": "B"},
    {"id": 3, "name": "Alice Brown", "age": 21, "grade": "C"},
  ];

  // Remove student with ID 2
  students.removeWhere((student) => student["id"] == 2);
  print("After Removing Student with ID 2:");

  for (var student in students) {
    print(student);
  }
}

Output:

After Removing Student with ID 2:
{id: 1, name: John Doe, age: 20, grade: A}
{id: 3, name: Alice Brown, age: 21, grade: C}

4. Update a Map in the List

To update an item, search for the object by a condition and modify its properties.

void main() {
  List<Map<String, dynamic>> students = [
    {"id": 1, "name": "John Doe", "age": 20, "grade": "A"},
    {"id": 2, "name": "Jane Smith", "age": 22, "grade": "B"},
  ];

  // Update student with ID 1
  for (var student in students) {
    if (student["id"] == 1) {
      student["name"] = "John Updated";
      student["grade"] = "A+";
    }
  }

  print("After Updating Student with ID 1:");
  for (var student in students) {
    print(student);
  }
}

Output:

After Updating Student with ID 1:
{id: 1, name: John Updated, age: 20, grade: A+}
{id: 2, name: Jane Smith, age: 22, grade: B}

5. Find a Map by ID (Search Operation)

To search for an object in a list, use .firstWhere() to filter by a condition.

void main() {
  List<Map<String, dynamic>> students = [
    {"id": 1, "name": "John Doe", "age": 20, "grade": "A"},
    {"id": 2, "name": "Jane Smith", "age": 22, "grade": "B"},
    {"id": 3, "name": "Alice Brown", "age": 21, "grade": "C"},
  ];

  // Find student with ID 3
  var student = students.firstWhere((student) => student["id"] == 3);
  print("Found Student: $student");
}

Output:

Found Student: {id: 3, name: Alice Brown, age: 21, grade: C}

Full Example Combining All Operations

void main() {
  List<Map<String, dynamic>> students = [
    {"id": 1, "name": "John Doe", "age": 20, "grade": "A"},
    {"id": 2, "name": "Jane Smith", "age": 22, "grade": "B"},
    {"id": 3, "name": "Alice Brown", "age": 21, "grade": "C"},
  ];

  print("Initial List of Students: $students");

  // Add
  students.add({"id": 4, "name": "Bob White", "age": 23, "grade": "A+"});
  print("\nAfter Adding a New Student: $students");

  // Update
  for (var student in students) {
    if (student["id"] == 2) {
      student["name"] = "Jane Updated";
      student["grade"] = "A-";
    }
  }
  print("\nAfter Updating Student with ID 2: $students");

  // Remove
  students.removeWhere((student) => student["id"] == 3);
  print("\nAfter Removing Student with ID 3: $students");

  // Find
  var foundStudent = students.firstWhere((student) => student["id"] == 1);
  print("\nFound Student with ID 1: $foundStudent");
}

Output

Initial List of Students: [{id: 1, name: John Doe, age: 20, grade: A}, {id: 2, name: Jane Smith, age: 22, grade: B}, {id: 3, name: Alice Brown, age: 21, grade: C}]

After Adding a New Student: [{id: 1, name: John Doe, age: 20, grade: A}, {id: 2, name: Jane Smith, age: 22, grade: B}, {id: 3, name: Alice Brown, age: 21, grade: C}, {id: 4, name: Bob White, age: 23, grade: A+}]

After Updating Student with ID 2: [{id: 1, name: John Doe, age: 20, grade: A}, {id: 2, name: Jane Updated, age: 22, grade: A-}, {id: 3, name: Alice Brown, age: 21, grade: C}, {id: 4, name: Bob White, age: 23, grade: A+}]

After Removing Student with ID 3: [{id: 1, name: John Doe, age: 20, grade: A}, {id: 2, name: Jane Updated, age: 22, grade: A-}, {id: 4, name: Bob White, age: 23, grade: A+}]

Found Student with ID 1: {id: 1, name: John Doe, age: 20, grade: A}

Summary

Operation

Method

Example

Add (Append)

list.add(map)

students.add(newStudent);

Remove by Condition

list.removeWhere()

students.removeWhere((s) => s["id"] == 1);

Update by Condition

Loop through list

student["name"] = "Updated Name";

Find by Condition

list.firstWhere()

list.firstWhere((s) => s["id"] == 3);

Updated on