ListView.builder in Flutter
Introduction
ListView.builder is a highly efficient way to create lists that display a large number of items. It creates items as they’re scrolled onto the screen, which is ideal for lists with a large number of items.
Note: Before learning ListView.builder, make sure you understand the basics of ListView.
Example 1: Basic ListView.builder
In this example below, you will learn how to create a simple list of items using ListView.builder.
ListView.builder(
itemCount: 20,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Item $index'),
);
},
)
Example 2: To-Do List App
In this example below, you will learn how to create a simple to-do list app using ListView.builder.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final List<String> tasks = [
'Go to Gym',
'Go to College',
'Go to Office',
// Add more tasks
];
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('To-Do List')),
body: ListView.builder(
itemCount: tasks.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(tasks[index]),
);
},
),
),
);
}
}
Example 3: To-Do List App Using Using a Data Model
In this example below, you will learn how to create a to-do list app using Data Model and ListView.builder.
Step 1: Define the Data Model
First, we define a simple data model for a task.
class Task {
final String title;
final String subtitle;
Task({
required this.title,
required this.subtitle,
});
}
Note: Data Model is a simple class that defines the structure of your data. This allows for a more structured and detailed representation of your data.
Step 2: Create Sample Data
Next, we create a list of sample tasks.
List<Task> tasks = [
Task(
title: 'Go to Gym',
subtitle: 'Go to Gym at 6:00 AM',
),
Task(
title: 'Go to College',
subtitle: 'Go to College at 8:00 AM',
),
Task(
title: 'Go to Office',
subtitle: 'Go to Office at 11:00 AM',
),
// Add more sample tasks
];
Step 3: Use ListView.builder
Now, we use ListView.builder to build the list.
ListView.builder(
itemCount: tasks.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(tasks[index].title),
subtitle: Text(tasks[index].subtitle),
);
},
)
Example 4: Social Media Feed App
In this example below, you will learn how to create a social media feed app using ListView.builder. Click on run online button to see the output.
Step 1: Define the Data Model
First, we define a simple data model for a post.
class Post {
final String username;
final String userImageUrl;
final String timestamp;
final String contentText;
final String contentImageUrl;
Post({
required this.username,
required this.userImageUrl,
required this.timestamp,
required this.contentText,
required this.contentImageUrl,
});
}
Step 2: Create Sample Data
Next, we create a list of sample posts.
List<Post> posts = [
Post(
username: 'John Doe',
userImageUrl: 'https://picsum.photos/250?image=237',
timestamp: '2h',
contentText: 'Enjoying the beautiful sunset at the beach!',
contentImageUrl: 'https://picsum.photos/250?image=51',
),
Post(
username: 'Mark Doe',
userImageUrl: 'https://picsum.photos/250?image=238',
timestamp: '1d',
contentText: 'Just got back from a fun vacation in the mountains.',
contentImageUrl: 'https://picsum.photos/250?image=52',
),
// Add more sample posts
];
Step 3: Build the ListView
Now, we use ListView.builder to build the list.
ListView.builder(
itemCount: posts.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ListTile(
leading: CircleAvatar(backgroundImage: NetworkImage(posts[index].userImageUrl)),
title: Text(posts[index].username),
subtitle: Text(posts[index].timestamp),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(posts[index].contentText),
),
Image.network(posts[index].contentImageUrl),
],
),
);
},
)
Challenge
Create app using ListView.builder to display a scrollable list containing the names of your 10 friends, with each name as a separate item.