Do’s and Don’ts when you use List in your DART CODE !!

Lists are the most loved data structure by Flutter Developers. But there are some mistakes that even Sr. Developers might do, which doesn’t affect the user, but highly affect the performance of your app! So let’s see them one by one.

Image Copyright to the respective owner
List<int> _items = [];

1. Add Elements:

Now, to add elements, we have the following 4 methods:

  • .addAll(List<E> value): This method adds all elements present in the list value into another list on which addAll is used.
  • .insert(int index, E element): This method inserts an element of type E at the mentioned index into the list.
  • .insertAll(int index, List<E> value): This method inserts the list value at the mentioned index into the list on which insertAll is used.
for(int i=0; i<10; i++){
_items.add(i);
}

However, for loops should be restricted as much as possible! It takes a lot of resources.

To do the above thing, we can use the .generate method of List class as follows:

_items = List.generate(10, (index) => index);
print(_items);
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2. Remove Element:

  • To remove a particular element, we can use .remove(E Value) This will remove the first occurrence of value in the List. Eg: _items.remove(2) This will remove the value 2 from the list _items.
  • To remove the last element from the list, we can use .removeLast() . Eg: _items.removeLast() . This will remove the last element (here value 9 ) from the list _items
  • To remove element at a particular index, we can use .removeAt(int index) . Eg: _items.removeAt(5) . This will remove the value of _items[5] .
for (int i = 0; i < _items.length; i++) {
if (_items[i] % 2 == 0)
_items.removeAt(i);
}
_items.forEach((element) {
if (element % 2 == 0) _items.remove(element);
});
Concurrent modification during iteration: Instance(length:9) of '_GrowableList'.
  List<int> _temp = [];
_temp.addAll(_items);
_items.forEach((element) {
if (element % 2 == 0) _temp.remove(element);
});
_items.clear();
_items.addAll(_temp);
_items.removeWhere((element) => element % 2 == 0);

3. Update Element:

To update a particular element, we don’t have any inbuilt method. The obvious 2 solutions are using for and for-each loop. But they are not so efficient. So here’s a trick for the same:

_items = _items.map((e) => e % 2 == 0 ? e + 1 : e).toList();

Don’t forget to connect with me on:

Don’t stop, until you are breathing!💙
- Abhishek Doshi

Google Developer Expert — Dart & Flutter 💙