Неожиданная ошибка при разборе JsonData во флаттере - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь разобрать json список данных, чтобы я мог сохранить в объект. Но я продолжал получать ошибки каждый раз, и я не знаю, почему.

Json Данные

{
    "status": "success",
    "data": [
        {
            "distro_name": "Ikeja Electric (IKEDC)",
            "service_id": "ikeja-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Eko Electric (EKEDC)",
            "service_id": "eko-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Ibadan Electric (IBEDC)",
            "service_id": "ibadan-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Kano Electric (KEDCO)",
            "service_id": "kano-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Jos Electricity Distribution (JED)",
            "service_id": "jos-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        },
        {
            "distro_name": "Port-Harcourt Electric (PHED)",
            "service_id": "portharcourt-electric",
            "type": [
                "prepaid",
                "postpaid"
            ]
        }
    ]
}

Это мой класс модели для данных.

Модель

class Providers {
  String distro_name;
  String service_id;
  dynamic type;

  Providers(this.distro_name, this.service_id, this.type);


  Providers.fromJson(Map<String, dynamic> json):
        distro_name = json['distro_name'],
        service_id = json['service_id'],
        type = json['type'];

}

Main.dart

fetchProviders() async{
    try {
      final response = await http.get(
        uri,
        headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + _bloc.bearerToken, },
      );
      final responseJson = json.decode(response.body);
      for (var u in responseJson["data"]) {
       Providers provider = Providers(
            u["distro_name"],
            u["service_id"],
             u["list"]);
      providerList.add(provider);
      }
      return responseJson;
    } catch (exception) {
      print(exception);
    }
  }

Это ошибка, которую я получаю.

 NoSuchMethodError: The method 'add' was called on null.
I/flutter ( 1366): Receiver: null

Я действительно не знаю, почему я получаю эту ошибку. У меня нет нулевых значений в моем API, и я использовал такую ​​структуру json в прошлом.

Ответы [ 3 ]

1 голос
/ 23 марта 2020

Инициализировать providerList:

var providerList = </* type */>[]
      for (var u in responseJson["data"]) {
       Providers provider = Providers(
            u["distro_name"],
            u["service_id"],
             u["list"]);
      providerList.add(provider);
      }

Используя карту списка:

providerList = responseJson["data"].map((u) => Providers(
                 u["distro_name"],
                 u["service_id"],
                 u["list"],
               )).cast<String>().toList();
0 голосов
/ 24 марта 2020

модель

       class Providers {
        String distro_name;
        String service_id;
       dynamic type;

 Providers(this.distro_name, this.service_id, this.type);


 factory Providers.fromJson(Map<String, dynamic> json){

    return Providers(
       distro_name = json['distro_name'],
       service_id = json['service_id'],
        type = json['type'],
     );
     }
     }

main.dart

fetchProviders() async{
try {
  final response = await http.get(
    uri,
    headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + _bloc.bearerToken, },
  );
  final responseJson = json.decode(response.body);
  for (var u in responseJson['data']) {
   Providers provider = Providers.fromJson(u);
   providerList.add(provider);
 return responseJson;
     }
  } 
  catch (exception) {
  print(exception);
    }
  }
0 голосов
/ 24 марта 2020

Модель

class Providers {
  String distro_name;
  String service_id;
  dynamic type;

  Providers(this.distro_name, this.service_id, this.type);

  Providers.fromJson(Map<String, dynamic> json) => Providers(
    json['distro_name'],
    json['service_id'],
    json['type'],
 );

}

Main.dart

fetchProviders() async{
    try {
      final response = await http.get(
        uri,
        headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + _bloc.bearerToken, },
      );
      final responseJson = json.decode(response.body);
      responseJson.forEach((data){
       Providers provider = Providers.fromJson(data);
       providerList.add(provider);
     return responseJson;
    });
    } catch (exception) {
      print(exception);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...