ListView.separated helps you show a list of items with a clear divider between each item. It makes your list look neat and easy to read.
ListView.separated in Flutter
ListView.separated( itemCount: itemCount, itemBuilder: (BuildContext context, int index) { return WidgetForItem; }, separatorBuilder: (BuildContext context, int index) { return WidgetForSeparator; }, )
itemCount tells how many items are in the list.
itemBuilder creates each item widget.
separatorBuilder creates the widget that goes between items, like a divider.
ListView.separated( itemCount: 3, itemBuilder: (context, index) => Text('Item $index'), separatorBuilder: (context, index) => Divider(), )
ListView.separated( itemCount: 0, itemBuilder: (context, index) => Text('No items'), separatorBuilder: (context, index) => Divider(), )
ListView.separated( itemCount: 1, itemBuilder: (context, index) => Text('Only one item'), separatorBuilder: (context, index) => SizedBox(height: 10), )
This app shows a list of 5 items. Each item has a number inside a circle and a text label. Between each item is a blue line divider.
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('ListView.separated Example')), body: ListView.separated( itemCount: 5, itemBuilder: (context, index) { return ListTile( leading: CircleAvatar(child: Text('${index + 1}')), title: Text('Item number ${index + 1}'), ); }, separatorBuilder: (context, index) => const Divider(color: Colors.blue), ), ), ); } }
The separatorBuilder is called one less time than itemBuilder because separators go between items.
Using ListView.separated is better than manually adding dividers inside itemBuilder because it keeps code clean and efficient.
Remember that separators do not appear after the last item.
ListView.separated creates a scrollable list with separators between items.
You provide how to build each item and how to build each separator.
Separators help make lists easier to read and look nicer.
Practice
ListView.separated in Flutter?Solution
Step 1: Understand ListView.separated usage
ListView.separatedis designed to build lists with separators between each item.Step 2: Compare with other options
Options B, C, and D describe other Flutter widgets or uses unrelated toListView.separated.Final Answer:
To create a scrollable list with separators between items -> Option CQuick Check:
ListView.separated = scrollable list with separators [OK]
- Confusing ListView.separated with GridView
- Thinking it creates static widgets
- Assuming it handles user input
ListView.separated with 5 items?Solution
Step 1: Identify correct parameter names
The correct parameters areitemCount,itemBuilder, andseparatorBuilder.Step 2: Check function signatures
itemBuilderandseparatorBuildertake(context, index)and return widgets.Final Answer:
ListView.separated(itemCount: 5, itemBuilder: (context, index) => Text('Item $index'), separatorBuilder: (context, index) => Divider()) -> Option AQuick Check:
Correct parameter names and builder signatures = ListView.separated(itemCount: 5, itemBuilder: (context, index) => Text('Item $index'), separatorBuilder: (context, index) => Divider()) [OK]
- Using wrong parameter names like items or count
- Omitting context or index in builder functions
- Passing widgets directly instead of builder functions
ListView.separated(
itemCount: 3,
itemBuilder: (context, index) => Text('Item $index'),
separatorBuilder: (context, index) => Divider(color: Colors.red),
)Solution
Step 1: Analyze itemCount and itemBuilder
There are 3 items labeled 'Item 0', 'Item 1', and 'Item 2'.Step 2: Analyze separatorBuilder
Between each item, a red coloredDividerwidget is inserted.Final Answer:
A scrollable list with 3 items and red dividers between them -> Option BQuick Check:
itemCount=3 with red Dividers = A scrollable list with 3 items and red dividers between them [OK]
- Thinking separators add extra list items
- Ignoring the color property of Divider
- Assuming no separators appear without extra code
ListView.separated code:
ListView.separated(
itemCount: 3,
itemBuilder: (context) => Text('Item'),
separatorBuilder: (context, index) => Divider(),
)Solution
Step 1: Check itemBuilder function signature
itemBuildermust have two parameters:(context, index). Here it only has(context).Step 2: Verify separatorBuilder signature
separatorBuildercorrectly has(context, index).Final Answer:
itemBuilder missing index parameter -> Option AQuick Check:
itemBuilder requires (context, index) parameters [OK]
- Omitting index in itemBuilder
- Confusing separatorBuilder parameters
- Thinking Divider can't be separator
ListView.separated that shows a list of names but only adds a separator if the next name starts with a different first letter. Which approach is correct?Solution
Step 1: Understand conditional separators
To add separators only when the next item's first letter differs,separatorBuildermust check adjacent items.Step 2: Implement conditional logic in separatorBuilder
Return aDividerif letters differ; otherwise, returnSizedBox.shrink()to show no separator.Final Answer:
Use separatorBuilder to compare current and next item first letters and return Divider or SizedBox.shrink() accordingly -> Option DQuick Check:
Conditional separator logic belongs in separatorBuilder [OK]
- Adding separators unconditionally
- Inserting Dividers inside itemBuilder
- Using GridView which lacks separators
Ready to prove it?
Pass the test and this pattern moves unknown
