Я использую api vantage api для получения информации о некоторых акциях. Вот функция для вызова API:
Future<Stock> fetchData() async {
final response = await http.get(
"https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=NSE:STRTECH&apikey=$apiKey");
if (response.statusCode == 200)
{
print(response.body);
return Stock.fromJson(json.decode(response.body));
}
else
throw Exception('Failed to get Stock');
}
Оператор print печатает значения, полученные из вызова API. Тем не менее, когда я пытаюсь отобразить вывод внутри Text () в futurebuilder, я получаю нулевое значение.
Данные, полученные из API-вызова:
{
"Global Quote": {
"01. symbol": "NSE:STRTECH",
"02. open": "88.5000",
"03. high": "91.5500",
"04. low": "85.7000",
"05. price": "90.0500",
"06. volume": "1240424",
"07. latest trading day": "2020-03-06",
"08. previous close": "93.1000",
"09. change": "-3.0500",
"10. change percent": "-3.2760%"
}
}
Отображение данных:
class _HomePageState extends State<HomePage> {
Future<Stock> futureStock;
@override
void initState() {
super.initState();
futureStock = fetchData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("SIFA"),
),
body: Center(
child: FutureBuilder<Stock>(
future: futureStock,
builder: (context, snapshot) {
if (snapshot.hasData)
return Text(
"${snapshot.data.symbol}\nlow:${snapshot.data.low}\nhigh:${snapshot.data.high}\nOpen
Price:${snapshot.data.openPrice}\nChange Percent:"
"${snapshot.data.changePercent}");
else if (snapshot.hasError) return Text("${snapshot.error}");
return CircularProgressIndicator();
}),
),
);
}
}
Что именно я делаю не так? Что я должен изменить, чтобы я мог напечатать значения полученных данных в будущем Builder?