Search code examples
jsonflutterkotlindartflutter-futurebuilder

Can't access my json data in Flutter, It always returns a Nullvalue for my data


Help please, I'm dumb. I have the problem, that I can't access my JSON data in my FutureBuilder, I'll always get a Null value in my FutureBuilder. Because of Nullsafety, I don't get an Error. Please help.

FutureBuilder<List<Analysts>>(
                      future: iexcloudanalysts.getData(),
                      builder: (context, snapshot) {
                        if (snapshot.hasData) {
                          Analysts analysts = Analysts();
                          return Text(
                            analysts.consensusDate ?? 'Error',
                            style: TextStyle(
                              color: Colors.white,
                              fontSize: 32,
                              fontWeight: FontWeight.bold,
                            ),
                          );
                        }

This is my Analysts model:

class Analysts {

  final String analystCount;
  final String consensusDate;
  final String marketConsensus;
  final String marketConsensusTargetPrice;

  Analysts({this.analystCount, this.consensusDate, this.marketConsensus,
    this.marketConsensusTargetPrice,});

  factory Analysts.fromJson(Map<String, dynamic> json) {
    return Analysts(
      analystCount: json['analystCount'].toString() as String,
      consensusDate: json['consensusDate'] as String,
      marketConsensus: json['marketConsensus'].toString() as String,
      marketConsensusTargetPrice: json['marketConsensusTargetPrice'].toString() as String,
    );
  }
}

This is my Cloud service:

class IEXCloudServiceAnalysts {

  Future<List<Analysts>> getData() async{

    var url = Uri.parse("https://sandbox.iexapis.com/stable/time-series/CORE_ESTIMATES/TSLA?token=Tpk_85b3b5cdb32147d3a0fb751cc5176cdd");
    Response res = await get(url);

    return parseAnalysis(res.body);

  }
}

List<Analysts> parseAnalysis(String responseBody) {
  final parsed = jsonDecode(responseBody).cast<Map<String, dynamic>>();
  return parsed.map<Analysts>((json) => Analysts.fromJson(json)).toList();
}

Solution

  • Use snapshot.data![0]?.consensusDate instead of analysts.consensusDate