O FlatList é um componente do React Native que permite exibir listas de elementos de forma eficiente, independentemente do tamanho da lista. Ele é especialmente útil para listas longas e dinâmicas que podem ser renderizadas sob demanda, melhorando o desempenho e a experiência do usuário. Veja exemplo:

Para usar o componente FlatList, você precisa primeiro importá-lo do pacote react-native. Em seguida, você pode renderizar uma lista de elementos com o FlatList passando as seguintes propriedades:
data: um array de objetos que serão exibidos na lista.
renderItem: uma função que recebe cada item do array e retorna um componente React que será exibido na lista.
A lista deve ser composta por objetos e cada objeto deve ter uma propriedade chamada id com valor único para cada objeto.
Aqui está um exemplo básico de como usar o FlatList:
import { View, FlatList, StyleSheet, Text } from 'react-native';
const DATA = [
{ id: '1', title: 'Item 1' },
{ id: '2', title: 'Item 2' },
{ id: '3', title: 'Item 3' },
{ id: '4', title: 'Item 4' },
{ id: '5', title: 'Item 5' },
{ id: '6', title: 'Item 6' },
{ id: '7', title: 'Item 7' },
{ id: '8', title: 'Item 8' },
{ id: '9', title: 'Item 9' },
{ id: '10', title: 'Item 10' },
{ id: '11', title: 'Item 11' },
{ id: '12', title: 'Item 12' },
{ id: '13', title: 'Item 13' },
{ id: '14', title: 'Item 14' },
{ id: '15', title: 'Item 15' },
{ id: '16', title: 'Item 16' },
{ id: '17', title: 'Item 17' },
{ id: '18', title: 'Item 18' },
{ id: '19', title: 'Item 19' },
{ id: '20', title: 'Item 20' },
];
const App = () => {
const renderizarItem = ({ item }) => (
<View style={styles.item}>
<Text style={styles.title}>{item.title}</Text>
</View>
);
return (
<View style={styles.container}>
<FlatList data={DATA} renderItem={renderizarItem} />
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
margin: 10,
marginTop: 50,
},
item: {
borderWidth: 1,
borderColor: 'red',
padding: 10,
},
title: {
fontSize: 30,
},
});
export default App;
Neste exemplo, estamos renderizando uma lista simples de vinte itens. Cada item é representado por um objeto que contém uma chave id e um título title. O componente FlatList recebe o array de objetos DATA, que é renderizado com a função renderizarItem, que retorna um componente View com o título do item.
O FlatList possui várias propriedades que permitem personalizar sua aparência e comportamento. Algumas das propriedades mais comuns incluem:
ItemSeparatorComponent: um componente React que é renderizado entre cada item da lista. Isso permite adicionar um separador visual entre os itens.
ListHeaderComponent: um componente React que é renderizado no topo da lista. Isso permite adicionar um cabeçalho à lista.
ListFooterComponent: um componente React que é renderizado no final da lista. Isso permite adicionar um rodapé à lista.
onEndReached: uma função que é chamada quando o usuário chega ao final da lista. Isso é útil para carregar mais itens dinamicamente à medida que o usuário rola a lista.
onRefresh: é uma função que é chamada quando o usuário realiza uma ação de "puxar para atualizar" na lista. Isso é útil para atualizar os dados da lista com informações mais recentes.
Concluindo, o componente FlatList é uma ferramenta poderosa para renderizar listas de elementos em um aplicativo React Native. Com ele, é possível exibir listas dinâmicas e longas de forma eficiente, melhorando a experiência do usuário. É importante entender as propriedades do FlatList e como usá-las para personalizar a aparência e o comportamento da lista. Com o conhecimento adequado, os alunos de ensino técnico podem criar aplicativos móveis sofisticados e funcionais usando o FlatList.
O FlatList é um dos componentes mais versáteis do React Native e pode ser usado de várias maneiras para renderizar listas de dados. Aqui estão alguns exemplos diversificados de como utilizar o FlatList:
Suponha que você tenha uma lista de produtos e queira exibi-los em uma tela. Você pode utilizar o FlatList para renderizar esses produtos da seguinte maneira:
import { FlatList, View, Text, Image, StyleSheet } from 'react-native';
const products = [
{
id: 1,
name: 'Product 1',
price: 9.99,
image: { uri: 'https://picsum.photos/id/1024/400/400' },
},
{
id: 2,
name: 'Product 2',
price: 14.99,
image: { uri: 'https://picsum.photos/id/1026/400/400' },
},
{
id: 3,
name: 'Product 3',
price: 19.99,
image: { uri: 'https://picsum.photos/id/1043/400/400' },
},
{
id: 4,
name: 'Product 4',
price: 24.99,
image: { uri: 'https://picsum.photos/id/1062/400/400' },
},
{
id: 5,
name: 'Product 5',
price: 29.99,
image: { uri: 'https://picsum.photos/id/1074/400/400' },
},
];
const renderItem = ({ item }) => (
<View style={styles.item}>
<Image source={item.image} style={styles.image} />
<Text style={styles.title}>{item.name}</Text>
<Text style={styles.price}>${item.price}</Text>
</View>
);
const App = () => (
<FlatList
data={products}
renderItem={renderItem}
keyExtractor={(item) => item.id.toString()}
style={styles.container}
/>
);
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop:40
},
item: {
backgroundColor: '#f9c2ff',
padding: 20,
marginVertical: 8,
marginHorizontal: 16,
},
title: {
fontSize: 32,
},
price: {
fontSize: 24,
},
image: {
width: '100%',
height: 200,
},
});
export default App;
Suponha que você queira exibir uma lista de imagens que estão armazenadas em um servidor e quer exibir apenas algumas imagens por vez, permitindo ao usuário navegar entre as páginas para ver mais imagens. Você pode utilizar o FlatList com a propriedade pagingEnabled para exibir a lista de imagens com paginação. Para paginar faça o gesto de arrastar para cima:
import { useState, useEffect } from 'react';
import { FlatList, Image, View, StyleSheet } from 'react-native';
const App = () => {
const [images, setImages] = useState([]);
const [page, setPage] = useState(1);
useEffect(() => {
fetch(`https://picsum.photos/v2/list?page=${page}&limit=10`)
.then((response) => response.json())
.then((data) => setImages(data))
.catch((error) => console.error(error));
}, [page]);
const renderItem = ({ item }) => (
<View style={styles.item}>
<Image source={{ uri: item.download_url }} style={styles.image} />
</View>
);
const handleEndReached = () => {
setPage(page + 1);
};
return (
<FlatList
data={images}
renderItem={renderItem}
keyExtractor={(item) => item.id.toString()}
style={styles.container}
contentContainerStyle={styles.contentContainer}
numColumns={2}
// habilita a paginação
pagingEnabled={true}
// define a função 'onEndReached' para carregar mais imagens quando o usuário chegar ao final da lista
onEndReached={handleEndReached}
// define a quantidade de pixels que o usuário precisa rolar a lista para que a função 'onEndReached' seja disparada
onEndReachedThreshold={0.1}
/>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f1f1f1',
},
contentContainer: {
paddingVertical: 20,
paddingHorizontal: 10,
},
item: {
flex: 1,
marginHorizontal: 5,
marginVertical: 10,
aspectRatio: 1,
},
image: {
flex: 1,
borderRadius: 5,
},
});
export default App;
Suponha que você tenha uma lista de notícias e queira exibi-las em uma tela. Você pode utilizar o FlatList para renderizar essas notícias da seguinte maneira:
import { FlatList, View, Text, Image, StyleSheet } from 'react-native';
const news = [
{
id: 1,
title:
'Casos de covid no mundo ultrapassam 400 milhões com domínio global da ômicron',
summary:
'A Organização Mundial da Saúde (OMS) alertou nesta segunda-feira que o número de casos de covid-19 no mundo ultrapassou a marca de 400 milhões, com o domínio global da variante ômicron do vírus.',
},
{
id: 2,
title:
'França decreta novo confinamento para conter segunda onda da Covid-19',
summary:
'A França decretou novo confinamento a partir desta quinta-feira (10) para conter a segunda onda da Covid-19 que, segundo o primeiro-ministro francês, Jean Castex, é mais forte que as anteriores.',
},
{
id: 3,
title: 'Nasa acha componente do plástico em lua de Saturno',
summary:
'A sonda espacial Cassini encontrou fragmentos de plástico em Titã, uma das luas de Saturno, mostrando que a poluição causada pelo homem pode chegar a lugares muito distantes.',
},
{
id: 4,
title: 'Nasa pousa sonda em asteroide e coleta amostras da rocha',
summary:
'A sonda OSIRIS-REx da Nasa pousou no asteroide Bennu na noite desta terça-feira (20) e coletou amostras da rocha espacial. Esta é a primeira vez que uma missão da Nasa tenta coletar amostras de um asteroide.',
},
];
const renderItem = ({ item }) => (
<View style={styles.item}>
<Text style={styles.title}>{item.title}</Text>
<Text style={styles.summary}>{item.summary}</Text>
</View>
);
const App = () => (
<FlatList
data={news}
renderItem={renderItem}
keyExtractor={(item) => item.id.toString()}
style={styles.container}
/>
);
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop:30
},
item: {
backgroundColor: '#fff',
padding: 20,
marginVertical: 8,
marginHorizontal: 16,
borderRadius: 10,
shadowColor: '#000',
shadowOffset: {
width: 0,
height: 2,
},
shadowOpacity: 0.25,
shadowRadius: 3.84,
elevation: 5,
},
title: {
fontSize: 24,
fontWeight: 'bold',
marginBottom: 10,
},
summary: {
fontSize: 18,
},
image: {
width: '100%',
height: 200,
borderRadius: 10,
marginBottom: 10,
},
});
export default App;