大佬教程收集整理的这篇文章主要介绍了类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在调用 API,但我一直在尝试正确解析此 JsON
响应,但一直无法解决此问题。我调用 API,并希望显示带有 FutureBuilder
和 ProvIDer
的数据,但我收到错误 Type 'List<dynamic>' is not a subtype of type 'FutureOr<List<RIDeData>>'
,我不确定我做错了什么。代码如下:
API 调用:
Future<List<RIDeData>> getRIDes() async {
final response = await http.APIrequest(Method.GET,'/rIDes');
final data = JsonDecode(response.body)['data'];
return data;
}
我想在其中显示数据的 Future 构建器:
Future<List<RIDeData>> _getRIDeStreamList() async {
final _vehicleStreamData = await APICall.instance.getRIDes();
var provIDer = ProvIDer.of<RIDeStore>(context,Listen: @R_197_11372@sE);
provIDer.setVehicleList(_vehicleStreamData,notify: @R_197_11372@sE);
return _vehicleStreamData;
}
@overrIDe
Widget build(BuildContext context) {
return Scaffold(
BACkgroundcolor: colors.white,body: SafeArea(
child: SingleChildScrollVIEw(
scrollDirection: Axis.vertical,child: column(
children: [
Container(
height: 1000,child: FutureBuilder<List<RIDeData>>(
future: _getRIDeStreamList(),builder: (context,snapshot) {
if (snapshot.hasData) {
Consumer<RIDeStore>(
builder: (context,rIDeData,child) {
return ListVIEw.builder(
shrinkWrap: true,itemCount: rIDeData.rIDeList.length,itemBuilder: (context,indeX) {
RIDeData rIDes = rIDeData.getRIDeByIndex(indeX);
return Text('${rIDes.rIDEID}');
},);
},);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return Container();
},),],);
}
我几乎可以肯定 API 调用和响应的问题,因为我没有正确解析 JsON 数据,但也许我错了,还有其他问题......
然后创建 RideData 的 Model 类
Future<List<RideData>> getRides() async {
final response = await http.apirequest(Method.GET,'/rides');
List<dynamic> data = jsonDecode(response.body)['data'];
List<YourModelClass> list = [];
if (response.data != null) {
list = data.map((item) => YourModelClass.fromJson(item)).toList();
}
return list;
}
可以生成模型类 https://javiercbk.github.io/json_to_dart/
,这一行
final data = jsonDecode(response.body)['data'];
您正在获取数据并对其进行解码,它会返回一个地图或字符串,而不是任何列表或任何模型....您应该先创建一个 RideData 列表,然后再返回它
你可以按照这个方法
List<RideData> list = List<RideData>();
if (response.data != null) {
list = data.map((item) => RideData.fromJson(item)).toList();
}
return list;
}
,
而且,除了指出的其他问题之外,您还这样做了:
future: _getRideStreamList(),
永远永远永远构建作为构建 FutureBuilder 的一部分,您正在关注的未来。无限循环!阅读 FutureBuilder 的文档,尤其要注意第二和第三段。 StreamBuilder 也是如此。我有一个关于 https://www.youtube.com/watch?v=sqE-J8YJnpg 的视频来说明为什么文档不会说谎。
以上是大佬教程为你收集整理的类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter全部内容,希望文章能够帮你解决类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。