程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter?

开发过程中遇到类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter的问题如何解决?下面主要结合日常开发的经验,给出你关于类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter的解决方法建议,希望对你解决类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter有所启发或帮助;

我正在调用 API,但我一直在尝试正确解析此 JsON 响应,但一直无法解决此问题。我调用 API,并希望显示带有 FutureBuilderProvIDer 的数据,但我收到错误 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,请注明来意。