ListView InDepth Review - Flutter
When we need widgets stacked up one below another, we use ListView. There are four ways in which you can use a ListView.
We will see each of them in use one by one.
First Method : Normally Calling ListView widget.
class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return Scaffold( body: ListView( children: <Widget>[ Container( color: Colors.red, child: Text('Element 1'), ), Container( color: Colors.blue, child: Text('Element 2'), ), Container( color: Colors.green, child: Text('Element 3'), ), Container( color: Colors.orange, child: Text('Element 4'), ), ], ), ); } }
So in FirstMethod we simply use ListView Widget and use the children property to add in the children's.
Second Method : Using ListView.builder()
class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { List<String> myList = ['Element 1', 'Element 2', 'Element 3', 'Element 4']; List<Color> mycolor = [Colors.red, Colors.blue, Colors.green, Colors.orange]; @override Widget build(BuildContext context) { return Scaffold( body: ListView.builder( itemCount: myList.length, itemBuilder: (context, index) { return Container( color: mycolor[index], child: Text(myList[index]), ); }, ), ); } }
In Second method we create list of widgets dynamically we need to pass the item count and create a build method which has two parameters
- Context
- Index
Context is basically the screen on which the item will be returned and index is basically a number using which we will access the list's. So let us take the list myList as mentioned in code, index will basically run through as 0, 1, 2 and 3 because we had set the count to the length of myList. suppose we set the item count to 2 then the index will run through 0 and 1. We use the index number to access the elements in the list but well you can do anything you like with it.
Third Method : Using ListView.separated()
class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { List<String> myList = ['Element 1', 'Element 2', 'Element 3', 'Element 4']; List<Color> mycolor = [Colors.red, Colors.blue, Colors.green, Colors.orange]; @override Widget build(BuildContext context) { return Scaffold( body: ListView.separated( itemCount: myList.length, itemBuilder: (context, index) { return Container( color: mycolor[index], child: Text(myList[index]), ); }, separatorBuilder: (BuildContext context, int index) { return Container( child: Text('This Widget is called to separate'), ); }, ), ); } }
ListView.separated provides us with another parameter which is a separatorBuilder. it also takes in a context and an index. The child is basically a separator which separates the list items.
Output for 1st & 2nd Method:
Output for 3rd Method:
If you enjoyed, subscribe for more. Check out for In Depth Review of Text Widget & Stateless Vs Stateful Widgets.