Como usar o FutureBuilder para exibir dados assíncronos no Flutter?
Como usar o FutureBuilder para exibir dados assíncronos no Flutter?
Oii, estudante. Tudo bem?
O FutureBuilder
é um widget do Flutter que constrói seu conteúdo com base no estado de um Future
. Ele é útil para lidar com operações assíncronas, como buscar dados de uma API ou acessar um banco de dados.
FutureBuilder
Vamos criar um exemplo que busca dados de uma API fictícia e exibe os resultados em um ListView
.
import 'package:flutter/material.dart';
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Exemplo de FutureBuilder'),
),
body: Center(
child: DataFetcher(),
),
),
);
}
}
class DataFetcher extends StatelessWidget {
// Simula uma operação assíncrona, como buscar dados de uma API
Future<List<String>> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // Simula um atraso
return ['Item 1', 'Item 2', 'Item 3', 'Item 4'];
}
@override
Widget build(BuildContext context) {
return FutureBuilder<List<String>>(
future: fetchData(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// Exibe um indicador de carregamento enquanto os dados estão sendo buscados
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Exibe uma mensagem de erro se ocorrer algum problema
return Text('Erro: ${snapshot.error}');
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
// Exibe uma mensagem se não houver dados
return Text('Nenhum dado encontrado');
} else {
// Exibe os dados em um ListView
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data![index]),
);
},
);
}
},
);
}
}
Criação de um Future:
A função fetchData
simula uma operação assíncrona que busca dados. Ela simplesmente retorna uma lista de strings após um atraso de 2 segundos para simular a latência da rede.
Uso do FutureBuilder
:
O FutureBuilder
leva dois parâmetros principais:
future
: O Future
que está sendo aguardado.builder
: Uma função que constrói o widget com base no estado do Future
.Estados do FutureBuilder
:
Dentro do builder
, o estado do Future
é verificado usando snapshot.connectionState
:
ConnectionState.waiting
: Enquanto o Future
está em andamento, um CircularProgressIndicator
é exibido.snapshot.hasError
: Se ocorrer um erro durante a operação, uma mensagem de erro é exibida.snapshot.hasData
: Quando os dados são retornados com sucesso, eles são exibidos em um ListView
.ListView.builder:
Se os dados são recebidos com sucesso, um ListView.builder
é usado para exibir a lista de itens. O itemBuilder
cria um ListTile
para cada item na lista.
Com esse padrão, você pode lidar facilmente com operações assíncronas no Flutter, garantindo que seu aplicativo permaneça responsivo e forneça feedback apropriado ao usuário durante o carregamento dos dados.
Espero ter ajudado.
Um abraço e bons estudos.