Oi pessoal. Sou iniciante na programação e em flutter.
Estou fazendo uma APP que consome dados de uma api para ver a cotação de moedas.
Há 2 páginas (com apis diferentes) que apresentam o mesmo erro (imagem). Quando vou de uma página para outra a mensagem aparece e após alguns segundos (até uns 5 segundos) a página carrega normal. (Gif mostrando o erro e em seguida a página carregando)
Já fiz de tudo, usei FutureBuilder, já usei snapshot (que por acaso não retornou nada, o que eu acho estranho, pois a página consome os dados da api após alguns segundos, e se eu dou um print, por exemplo, print(dolarComercial[0]['code']) ele me retorna o valor correto).
Vou postar aqui o código de apenas uma, pois creio que arrumando em uma consigo me virar na outra, uma vez que são semelhantes. Como eu disse sou iniciante e esse foi jeito que eu encontrei de consumir vários endpoints dentro de uma única função e também já fiz o teste usando apenas um único endpoint (cada uma retornando uma variável) e recebo o mesmo erro. Já tentei fazer uma função para cada endpoint e também por uma "tela" de carregamento utilizando o Flutter Spinkit, mas a única coisa que consegui foi um carregamento infinito, uma vez que o snapshot.data retorna sempre nulo
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';
void main() => runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
),
);
class Moedas extends StatefulWidget {
@override
_MoedasState createState() => _MoedasState();
}
class _MoedasState extends State<Moedas> {
List dolarComercial;
List dolarTurismo;
List euro;
//bool carregando = false;
Future<String> getData() async {
var responseDolarCom = await http.get(
Uri.encodeFull(
'https://economia.awesomeapi.com.br/json/daily/USD-BRL/1'),
headers: {'Accept': 'application/json'});
this.setState(
() {
dolarComercial = json.decode(responseDolarCom.body);
},
);
var responseDolarTur = await http.get(
Uri.encodeFull(
'https://economia.awesomeapi.com.br/json/daily/USDT-BRL/1'),
headers: {'Accept': 'application/json'});
this.setState(
() {
dolarTurismo = json.decode(responseDolarTur.body);
},
);
var responseEuro = await http.get(
Uri.encodeFull(
'https://economia.awesomeapi.com.br/json/daily/EUR-BRL/1'),
headers: {'Accept': 'application/json'});
this.setState(
() {
euro = json.decode(responseEuro.body);
},
);
print(dolarComercial[0]['code']);
}
@override
void initState() {
super.initState();
this.getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 50.0),
child: Column(
children: <Widget>[
Card(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 10.0),
child: Column(
children: <Widget>[
ListTile(
title: Text(
'DÓLAR COMERCIAL',
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
),
ListTile(
title: Text('Maior Cotação: R\$: ' +
dolarComercial[(0)]['high']),
),
ListTile(
title: Text(
'Menor Cotação: R\$: ' + dolarComercial[0]['low']),
),
ListTile(
title: Text('Variação: ' +
dolarComercial[0]['pctChange'] +
'%'),
),
],
),
),
),
SizedBox(height: 20.0),
Card(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 10.0),
child: Column(
children: <Widget>[
ListTile(
title: Text(
'DOLAR TURISMO',
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
),
ListTile(
title: Text(
'Maior Cotação: R\$: ' + dolarTurismo[0]['high']),
),
ListTile(
title: Text(
'Menor Cotação: R\$: ' + dolarTurismo[0]['low']),
),
ListTile(
title: Text(
'Variação: ' + dolarTurismo[0]['pctChange'] + '%'),
),
],
),
),
),
SizedBox(height: 20.0),
Card(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 10.0),
child: Column(
children: <Widget>[
ListTile(
title: Text(
'EURO',
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
),
ListTile(
title: Text('Maior Cotação: R\$: ' + euro[0]['high']),
),
ListTile(
title: Text('Menor Cotação: R\$: ' + euro[0]['low']),
),
ListTile(
title: Text('Variação: ' + euro[0]['pctChange'] + '%'),
),
],
),
),
),
],
),
),
),
);
}
}
Eu ficaria imensamente feliz se alguém puder me ajudar, pois já rodei a internet atrás de uma solução e não achei nada.
Desde já agradeço a atenção 😃