【问题标题】:How to load a list of objects from a request?如何从请求中加载对象列表?
【发布时间】:2021-08-03 13:54:27
【问题描述】:

我的第一个请求遇到问题,响应是一组对象,我需要帮助

模型类是:

    import 'package:meta/meta.dart';
import 'dart:convert';

List<Event> eventFromJson(String str) => List<Event>.from(json.decode(str).map((x) => Event.fromJson(x)));

String eventToJson(List<Event> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Event {
    Event({
        required this.id,
        required this.state,
        required this.province,
        required this.city,
        required this.latitude,
        required this.longitude,
        required this.startDate,
        required this.endDate,
        required this.openDoors,
        required this.startEventHour,
        required this.endDateHour,
        required this.nameEvent,
        required this.artistname,
        required this.poster,
        required this.enclosure,
        required this.eventType,
    });

    String id;
    String state;
    String province;
    String city;
    String latitude;
    String longitude;
    String startDate;
    String endDate;
    String openDoors;
    String startEventHour;
    String endDateHour;
    String nameEvent;
    String artistname;
    String poster;
    String enclosure;
    String eventType;

    
    factory Event.fromJson(Map<String, dynamic> json) => Event(
        id: json["id"],
        state: json["state"],
        province: json["province"],
        city: json["city"],
        latitude: json["latitude"],
        longitude: json["longitude"],
        startDate: json["startDate"],
        endDate: json["endDate"],
        openDoors: json["openDoors"],
        startEventHour: json["startEventHour"],
        endDateHour: json["endDateHour"],
        nameEvent: json["nameEvent"],
        artistname: json["artistname"],
        poster: json["poster"],
        enclosure: json["enclosure"],
        eventType: json["eventType"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "state": state,
        "province": province,
        "city": city,
        "latitude": latitude,
        "longitude": longitude,
        "startDate": startDate,
        "endDate": endDate,
        "openDoors": openDoors,
        "startEventHour": startEventHour,
        "endDateHour": endDateHour,
        "nameEvent": nameEvent,
        "artistname": artistname,
        "poster": poster,
        "enclosure": enclosure,
        "eventType": eventType,
    };
}

我发出请求的类是:

class MockEventRepository extends EventRepository{

  String _url = 'nevermind';
  Dio _dio =  Dio();
  
  @override
  Future<Event?> getEvent() {

    throw UnimplementedError();
  }
  Future<List<Event>> getEvents({bool refresh = false})async{
    List<Event> events = <Event>[];
    try{
        Response response   = await _dio.get(_url); 
        //Event event = Event.fromJson(response.data);
        String decodedData = json.decode(response.data);
        print(decodedData);
        
         return Future.delayed(const Duration(seconds: 2), () =>events);
         }on DioError catch(e){
           print(e);
           return [];
         }
  }

 
}

我无法读取 url 给我的 3 个事件列表,这是错误:

List' 不是 'Map

类型的子类型

如果你能帮助我,我将非常感激

【问题讨论】:

  • print(decodedData) 输出什么?您的代码在哪里失败?你能提供更多信息吗?
  • @mddg 错误在 json.decode(response.data);这里 Event event = Event.fromJson(response.data);所以我看不到打印输出是什么

标签: flutter dart


【解决方案1】:

映射响应中的每个元素后,您应该使用方法 .toList()。

你的代码应该是这样的:

List<Event> eventFromJson(String str) => List<Event>.from(json.decode(str).map((x) => Event.fromJson(x)).toList());

【讨论】:

  • 但是我怎么用这个,已经在我的模型上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2015-02-22
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多