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
相关产品推荐
相关产品推荐

