The recommended, efficient,
and effective way to build a list uses a ListView.Builder.
This method is great when you have a dynamic
list or a list with very large amounts of data.

Instead of creating a ListView, create a ListView.builder
that takes two key parameters: the initial length of the list,
and an ItemBuilder function.

The ItemBuilder function is similar to the cellForItemAt
delegate method in an iOS table or collection view,
as it takes a position, and returns the
cell you want rendered at that position.

Finally, but most importantly, notice that the onTap() function
doesn’t recreate the list anymore, but instead .adds to it.

Creating a scroll view

In UIKit, you wrap your views in a ScrollView that
allows a user to scroll your content if needed.

In Flutter the easiest way to do this is using the ListView widget.
This acts as both a ScrollView and an iOS TableView,
as you can layout widgets in a vertical format.