Flutter 类型';列表<;动态>';不是类型为';未来者<;列表<;RideData>&燃气轮机';,颤振

Flutter 类型';列表<;动态>';不是类型为';未来者<;列表<;RideData>&燃气轮机';,颤振,flutter,mobile,flutter-provider,flutter-futurebuilder,Flutter,Mobile,Flutter Provider,Flutter Futurebuilder,我正在调用一个API,但我一直在尝试正确解析这个JSON响应,但我无法解决这个问题。我调用API,并希望使用FutureBuilder和Provider显示数据,但我得到的错误是Type“List”不是类型“FutureOr”的子类型,我不确定我做错了什么。代码如下: API调用: Future<List<RideData>> getRides() async { final response = await HTTP.apiRequest(Method.GE

我正在调用一个API,但我一直在尝试正确解析这个
JSON
响应,但我无法解决这个问题。我调用API,并希望使用
FutureBuilder
Provider
显示数据,但我得到的错误是
Type“List”不是类型“FutureOr”的子类型,我不确定我做错了什么。代码如下:

API调用:

  Future<List<RideData>> getRides() async {
    final response = await HTTP.apiRequest(Method.GET, '/rides');
    final data = jsonDecode(response.body)['data'];
    return data;
  }
Future getRides()异步{
最终响应=等待HTTP.apirest(Method.GET,“/rides”);
最终数据=jsonDecode(response.body)['data'];
返回数据;
}
我要在其中显示数据的Future builder:

 Future<List<RideData>> _getRideStreamList() async {
    final _vehicleStreamData = await APICall.instance.getRides();
    var provider = Provider.of<RideStore>(context, listen: false);
    provider.setVehicleList(_vehicleStreamData, notify: false);
    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();
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
Future\u getRideStreamList()异步{
final _vehicleStreamData=wait APICall.instance.getRides();
var provider=provider.of(上下文,侦听:false);
provider.setVehicleList(_vehicleStreamData,notify:false);
返回车辆流数据;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
正文:安全区(
子:SingleChildScrollView(
滚动方向:轴垂直,
子:列(
儿童:[
容器(
身高:1000,
孩子:未来建设者(
future:_getRideStreamList(),
生成器:(上下文,快照){
if(snapshot.hasData){
消费者(
生成器:(上下文、rideData、child){
返回ListView.builder(
收缩膜:对,
itemCount:rideData.rideList.length,
itemBuilder:(上下文,索引){
RideData rides=RideData.getRideByIndex(索引);
返回文本(“${rides.rideId}”);
},
);
},
);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
返回容器();
},
),
),
],
),
),
),
);
}
我几乎可以肯定,API调用和响应存在问题,因为我没有正确解析JSON数据,但可能是我错了,还有其他问题…

这一行

    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;
  }
List=List();
if(response.data!=null){
list=data.map((item)=>RideData.fromJson(item)).toList();
}
退货清单;
}

然后制作RideData的模型类

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;
      }
Future getRides()异步{
最终响应=等待HTTP.apirest(Method.GET,“/rides”);
List data=jsonDecode(response.body)['data'];
列表=[];
if(response.data!=null){
list=data.map((item)=>YourModelClass.fromJson(item)).toList();
}
退货清单;
}
您可以生成模型类

除指出的其他问题外,您正在这样做:

future: _getRideStreamList(),
永远不要在构建未来的过程中构建你所关注的未来。无限循环!阅读FutureBuilder的文档,特别注意第二段和第三段。StreamBuilder也是如此。我有一个视频来说明为什么医生不撒谎