Почему я получаю ноль в текстовом поле? - PullRequest
0 голосов
/ 07 марта 2020

Я использую 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?

...