FutureBuilder

Flutter e Dart são assíncronos por natureza. Com a função Futures de Dart, pode-se manejar input e output (entrada ou saída de dados), sem se preocupar com linhas ou deadlocks.

Como se cria widgets usando Future?

FutureBuilder lhe permite determinar facilmente o estado atual de um future e escolher o que mostrar enquanto está carregando e quando se torna disponível.

Comece dando ao FutureBuilder um future e em seguida um builder.

FutureBuilder(
future: http.get('https://seusdados.josn'),
builder: (context, snapshot) {
return AwesomeData(snapshot.data);
}
...

Mas não deixe de verificar o estado do future com connectionState e de oferecer um widget adequado quando seu future estiver ocupado.

FutureBuilder(
future: http.get('https://seusdados.josn'),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return AwesomeData(snapshot.data);
} else {
return CircularProgressIndicator();
}
}
...

Por fim, é sempre bom verificar se não ocorreram erros enquanto seu future estava processando.

FutureBuilder(
future: http.get('https://seusdados.josn'),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Text(snapshot.error)
;
}

} else {
return CircularProgressIndicator();
}
}
...

Há outros connectionStates que você pode usar como por exemplo:

  • - ConnectionState.none;
  • - ConnectionState.waiting;
  • - ConnectionState.active;
  • - ConnectionState.done...

Você pode utilizar também o switch para cada uma das funções:

FutureBuilder(
future: http.get('https://seusdados.josn'),
builder: (context, snapshot) {
switch (snapshot.connectionState){
case ConnectionState.done: return new Text("Pressione o botão para iniciar");
case ConnectionState.waiting: return new Text("Carregando");
default:
if (snapshot.hasError) {
return Text("$.{snapshot.error}");
} else {

return Text("$.{snapshot.data}");
}

},
)

Para mais informações sobre FutureBuilder e outros widgets da Flutter, entre em flutter.io

107 Visualizações