You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter接口请求报错List<dynamic> is not subtype of future 如何解析显示pname

问题根因

你的接口返回的是List类型的JSON数组,但是请求方法声明返回单个ProductsRequest对象,且没有用提前写好的解析方法做转换,同时FutureBuilder的参数调用也存在不匹配问题,才会触发类型不兼容报错。

具体解决步骤

1. 修正请求方法

直接使用你已经定义好的productsrequestFromJson解析方法转换返回结果,如果你确定接口只会返回1条数据,取数组第一个元素返回即可:

// 删掉多余的参数声明,和调用逻辑对齐
Future<ProductsRequest> pnames() async {
  var url= 'https://abc.com/api/p'; // 顺便修正原url缺失//的问题
  final response = await http.get(Uri.parse(url)).timeout(const Duration(seconds: 105000));
  // 用预设的解析方法转成List<ProductsRequest>
  List<ProductsRequest> list = productsrequestFromJson(response.body);
  // 取第一条数据返回,匹配方法声明的返回类型
  return list.first;
}

2. 修正FutureBuilder调用

删掉调用pnames时多余的空字符串参数,补充必要的加载、错误判断逻辑:

FutureBuilder<ProductsRequest>(
  future: pnames(), // 去掉多余的空参数
  builder: (BuildContext context, snapshot) {
    if (snapshot.connectionState == ConnectionState.done) {
      if (snapshot.hasError) {
        return Text("加载错误:${snapshot.error}");
      }
      return _pdisplay(snapshot.data!);
    }
    return const CircularProgressIndicator();
  }
)

3. 优化显示逻辑(可选)

pname本身就是String类型,不需要额外调用toString方法:

Widget _pdisplay(ProductsRequest data) {
  return Container(
    child:Column(
      children: [
        Text(data.pname),
      ],
    )
  );
}

内容的提问来源于stack exchange,提问作者Hellen B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:18:02