【问题标题】:Sending HTTP Request from flutter getting Error type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'从flutter发送HTTP请求得到错误类型'List<dynamic>'不是'Map<String,dynamic>'类型的子类型
【发布时间】:2022-01-04 16:14:33
【问题描述】:

我正在尝试使用 uri 中的查询参数获取数据

uri = uri.replace(queryParameters: {'with': 'nutrition;restaurant;category;extras;extraGroups;options;optionGroups;foodReviews;foodReviews.user'})

但是,当我从 uri 中同时删除选项和选项组时,它可以正常工作,没有错误。它们在数据库中的存储方式或它们的 api 控制器中的存储方式没有什么不同。

我知道这绝对是我的疏忽,但我想不起来并且需要一些关于我错过或做错了什么会导致该错误的想法。

完整代码如下:

Future<Stream<Food>> getFood(String foodId) async {

  Uri uri = Helper.getUri('api/foods/$foodId');

  uri = uri.replace(queryParameters: {'with': 'nutrition;restaurant;category;extras;extraGroups;foodReviews;foodReviews.user'});
  try {

    final client = new http.Client();
    final streamedRest = await client.send(http.Request('get', uri));
    log( streamedRest.stream.toString()  );
    return streamedRest.stream.transform(utf8.decoder).transform(json.decoder).map((data) => Helper.getData(data)).map((data) {
      return Food.fromJSON(data);

    });

  } catch (e) {
    print(CustomTrace(StackTrace.current, message: uri.toString()).toString());
    return new Stream.value(new Food.fromJSON({}));
  }
}

这是模型:

    import '../helpers/custom_trace.dart';

class OptionGroup {
  String id;
  String name;
  
 OptionGroup();

 OptionGroup.fromJSON(Map<String, dynamic> jsonMap) {
    try {
      id = jsonMap['id'].toString();
      name = jsonMap['name'];

    } catch (e) {
      id = '';
      name = '';
      print(CustomTrace(StackTrace.current, message: e));
    }
  }

  Map toMap() {
    var map = new Map<String, dynamic>();
    map["id"] = id;
    map["name"] = name;

    return map;
  }

  @override
  String toString() {
    return this.toMap().toString();
  }

  @override
  bool operator ==(dynamic other) {
    return other.id == this.id;
  }

  @override
  int get hashCode => this.id.hashCode;
}

【问题讨论】:

    标签: flutter api dart


    【解决方案1】:

    当我们接收或发送数据时,它应该是 JSON 格式,相当于 dart 中的 Map。因此,请确保在发送请求时数据应该在 Map 中。 您可以通过object.toMap() 进行操作。

    【讨论】:

      【解决方案2】:

      正如我所见,您在查询中传递了完整的对象。您需要做的是使用类的toMap() 函数以地图格式发送对象数据

      【讨论】:

        猜你喜欢
        • 2021-04-06
        • 2023-01-07
        • 2019-03-23
        • 2021-09-08
        • 2022-11-02
        • 2021-04-13
        • 2019-08-18
        • 2019-01-22
        相关资源
        最近更新 更多