Flutter Api 响应列表动态不是未来的子类型

Posted

技术标签:

【中文标题】Flutter Api 响应列表动态不是未来的子类型【英文标题】:Flutter Api Response List dynamic is not subtype of future 【发布时间】:2021-12-05 02:02:32 【问题描述】:

你好,我有一个颤振响应,只是一个响应,它给了我来自 api 的产品名称

[

"pname":"xyz"

]

我想解析并在文本字段上显示 pname 值我尝试了以下方法

    Future<ProductsRequest> pnames() async 
      var url= 'https:abc.com/api/p';
      final response = await http.get(Uri.parse(url)).timeout(Duration(seconds: 105000));
      var responseJson = json.decode(response.body);
     
      return responseJson;
    
    

型号

List<ProductsRequest> productsrequestFromJson(String str) => List<ProductsRequest>.from(json.decode(str).map((x) => ProductsRequest.fromJson(x)));

String productsrequestToJson(List<ProductsRequest> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class ProductsRequest 
  ProductsRequest(
    this.pname,
  );

  String pname;

  factory ProductsRequest.fromJson(Map<String, dynamic> json) => ProductsRequest(
    pname: json["pname"],
  );

  Map<String, dynamic> toJson() => 
    "pname": pname,
  ;

然后在我的飞镖课上

  new FutureBuilder<ProductsRequest>(
            future: pnames(""),
            builder: (BuildContext context, snapshot) ....
Widget _pdisplay(ProductsRequest data) 
    return Container(
      child:Column(
        children: [
          Text(data.pname.toString()),

        ],

      )

    );

它显示一个错误列表动态不是未来的子类型

【问题讨论】:

你从来没有使用过 fromJson ......你得到了解码但是,就是这样。等待解码,然后使用你的 fromJson 方法,你应该很好 【参考方案1】:

首先,您在响应中得到的是一个列表。而您试图返回的只是原始响应的解码版本。

所以你需要做的就是对解码后的响应执行 forEach 并列出 ProductsRequest。

类似这样的:

  List<ProductsRequest> list = new List<ProductsRequest>();
  responseJson.forEach((v) 
    list.add(new ProductsRequest.fromJson(v));
  );

【讨论】:

以上是关于Flutter Api 响应列表动态不是未来的子类型的主要内容,如果未能解决你的问题,请参考以下文章

Dart Flutter 通用 Api 响应类 动态类 数据类型

Flutter - 无法将所有 json 数据从 api 响应保存到 Iterable List 编辑:(无法从可迭代列表中获取数据)

Flutter Snapshot 为空,但来自 api 的响应不是

将json响应添加到flutter中的列表

Flutter 中的动态 GridView 列表 UI

如何从动态列表中为 Vue 中的 API 响应创建列表渲染 JSON?