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

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

1. Add Elements:

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

  • .add(E value): This method adds a single element of type E (here int, as we have List<int>) at the end of the list.
  • .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] .
  • Using for loop (don’t use):
for (int i = 0; i < _items.length; i++) {
if (_items[i] % 2 == 0)
_items.removeAt(i);
}
  • Using for-each loop (better than forbut still, we have one better solution for this):
_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);
  • Using .removeWhere
    This is one of the most efficient methods to remove elements based on some condition!
_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

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Abhishek Doshi

Abhishek Doshi

1.92K Followers

Google Developer Expert — Dart, Flutter & Firebase 💙💛