在 Flutter/dart 的 Futurebuilder 中访问我的未来不起作用

Posted

技术标签:

【中文标题】在 Flutter/dart 的 Futurebuilder 中访问我的未来不起作用【英文标题】:Acessing my future in the Futurebuilder in Flutter/dart doesn't work 【发布时间】:2021-11-26 01:48:08 【问题描述】:

我很笨,什么都不懂了。我正在尝试获取我的 JSON 数据并将其显示在我的应用程序中,我在下面链接了所有相关代码 sn-ps,这是我的第一篇文章,所以如果我需要添加任何其他内容,我很抱歉。 我只有两个问题。 1. 我不知道如何从我的 AnalystModel 访问 FutureBuilder 中的数据,我尝试了不同的方法,例如使用 FutureBuilder 和使用 snapshot.hasdata[index]['analystCount'] 访问我的数据,一切都有它自己的问题, 请帮忙。我还使用了新版本的颤振,所以 'snapshot.data!analystCount 不起作用。 我的第二个问题是我在下面添加的错误,试图将 添加到我的 FutureBuilder 中,我在互联网上发现这个错误的解决方案只是,使用 FutureBuilder”但我已经这样做了:

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,
    );
  

这是我的云服务:

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();

这是我的文本端点:

FutureBuilder<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,
                            ),
                          );
                        
                        if(snapshot.hasError)
                          return Text(
                            'N/A',
                            style: TextStyle(
                              color: Colors.white,
                              fontSize: 32,
                              fontWeight: FontWeight.bold,
                            ),
                          );
                        
                        else 
                          return const Text(
                            "---",
                            style: TextStyle(
                              color: Colors.white,
                              fontSize: 32,
                              fontWeight: FontWeight.bold,
                            ),
                          );
                        
                      
                  ),

我得到的错误:

lib/Widgets/stock_analysts_widget.dart:63:48: Error: The argument type 'Future<List<Analysts>>' can't be assigned to the parameter type 'Future<Analysts>'.
 - 'Future' is from 'dart:async'.
 - 'List' is from 'dart:core'.
 - 'Analysts' is from 'package:flutter_app/models/analysts.dart' ('lib/models/analysts.dart').
                      future: iexcloudanalysts.getData(),
                                               ^

【问题讨论】:

【参考方案1】:

您需要更正未来的构建器泛型类型 FutureBuilder&lt;List&lt;Analysts&gt;&gt;

【讨论】:

这解决了我的第一个问题,但是,我仍然无法访问我得到的 Analysts 中的数据。 'analyst.consensusDate 只返回 Null 值。 使用snapshot.data得到List&lt;Analysts&gt;iexcloudanalysts.getData()返回 我希望能够显示来自我的链接的数据,JSON 信息,例如,analystCount。这不起作用,它只会返回“[分析师实例]” snapshot.data![0]?. analystCount 使用第一个元素

以上是关于在 Flutter/dart 的 Futurebuilder 中访问我的未来不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Flutter/Dart 中的 TDD。如何减少启动时间

是否可以用Dart / Flutter绘制图像?

HTTP 请求未在响应中执行 - Flutter/Dart

在 Flutter/Dart 中映射多个列表?

使用 Flutter/Dart 关闭 Dismissible

flutter Dart语言List如何获取索引值