-2

我正在尝试做一个包含 API 的示例。

这是我要返回的示例 API:

[
    {
        "ID": 47,
        "DerslikAd": "a",
        "SinifID": 1,
        "SinifAd": "1. Sınıf"
    },
    {
        "ID": 77,
        "DerslikAd": "4A",
        "SinifID": 4,
        "SinifAd": "4. Sınıf"
    },
    {
        "ID": 76,
        "DerslikAd": "5A",
        "SinifID": 5,
        "SinifAd": "5. Sınıf"
    },
    {
        "ID": 1,
        "DerslikAd": "8-A",
        "SinifID": 8,
        "SinifAd": "8. Sınıf"
    }
]

这是我的模型:

class DerslikListesiModel {
  int id;
  String derslikAd;
  String sinifID;
  String sinifAd;

  DerslikListesiModel({
    this.id,
    this.derslikAd,
    this.sinifID,
    this.sinifAd,
  });

  factory DerslikListesiModel.fromJson(Map<String, dynamic> json) {
    return DerslikListesiModel(
      id: json['ID'] != null ? json["ID"] : 0,
      derslikAd: json['DerslikAd'] != null ? json["DerslikAd"] : '',
      sinifID: json['SinifID'] != null ? json["SinifID"] : 0,
      sinifAd: json['SinifAd'] != null ? json["SinifAd"] : '',
    );
  }
}

这是我的服务模型列表:

import 'package:ogretmen_mobil/models/DerslikListesiModel.dart';

class DerslikList {
  final List<DerslikListesiModel> derslerinListesi;

  DerslikList({
    this.derslerinListesi,
  });

  factory DerslikList.fromJson(List<dynamic> parsedJson) {
    List<DerslikListesiModel> derslerinListesi = List<DerslikListesiModel>();
    //photos = parsedJson.map((i)=>Photo.fromJson(i)).toList();
    derslerinListesi =
        parsedJson.map((e) => DerslikListesiModel.fromJson(e)).toList();
    return DerslikList(
      derslerinListesi: derslerinListesi,
    );
  }
}

这是我获取价值的 API 服务:

Future<DerslikList> getDerslikListesi(int sonAktifSezonId, int sonAktifOkulId,
      String strTarih, String nTarih) async {
    return this
        .apiRequest(
      "Egitmen/DerslikListesi",
      RequestData(
        sonAktifOkulId: sonAktifOkulId,
        sonAktifSezonId: sonAktifSezonId,
        strTarih: strTarih,
        nTarih: nTarih,
      ),
    )
        .then((value) {
      if (value == null || value == "") {
        return null;
      } else {
        dynamic jdata = json.decode(value);
        DerslikList derslikList = DerslikList.fromJson(jdata);
        return derslikList;
      }
    });
  }

问题是我的反应很好。终端屏幕在这里:

flutter: ###### REQUEST URL: https://test.******/api/Egitmen/DerslikListesi
flutter: ###### REQUEST DATA: ####### 
{"ID":null,"OturumToken":"637388088738664992-462dcbff-9ac9-45e2-a6c3-60bec6a","appToken":"****-**-4108-9573-******","kullanici":null,"parola":null,"notificationkey":null,"OgrenciID":"61","SezonID":null,"DerslikID":null,"TakipTanimID":null,"OgretmenID":null,"GunDDMMYYYY":null,"SonAktifOkulID":1,"SonAktifSezonID":2021,"strTarih":"4.10.2020","nTarih":"2020-10-4","TestID":null,"DogruSayisi":null,"YanlisSayisi":null,"BosSayisi":null}
flutter: ###### RESPONSE DATA: ####### 
[{"ID":47,"DerslikAd":"a","SinifID":1,"SinifAd":"1. Sınıf"},{"ID":77,"DerslikAd":"4A","SinifID":4,"SinifAd":"4. Sınıf"},{"ID":76,"DerslikAd":"5A","SinifID":5,"SinifAd":"5. Sınıf"},{"ID":1,"DerslikAd":"8-A","SinifID":8,"SinifAd":"8. Sınıf"}]
 ############################
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: type 'int' is not a subtype of type 'String'
#0      new DerslikListesiModel.fromJson (package:ogretmen_mobil/models/DerslikListesiModel.dart:18:40)
#1      new DerslikList.fromJson.<anonymous closure> (package:ogretmen_mobil/models/DerslikListesi.dart:14:51)
#2      MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
#3      ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#4      new List.from (dart:core-patch/array_patch.dart:38:29)
#5      new List.of (dart:core-patch/array_patch.dart:68:17)
#6      ListIterable.toList (dart:_internal/iterable.dart:211:44)
#7      new DerslikList.fromJson (package:ogretmen_mobil/models/DerslikListesi.dart:14:64)
#8      ApiService.getDerslikListesi.<anonymous closure> (package:ogretmen_mobil/services/api_service.dart:209:47)
#9      _rootRunUnary (dart:async/zone.dart:1198:47)
#10     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#11     _FutureListener.handleValue (dart:async/<…&gt;
[VERBOSE-2:profiler_metrics_ios.mm(184)] Error retrieving thread information: (ipc/send) invalid destination port

我收到此错误消息:

Unhandled Exception: type 'int' is not a subtype of type 'String'

这是我想用数据准备的示例屏幕:

class DerslikListesiGosterScreen extends StatefulWidget {
  static final String id = "derslik_listesli_goster_screen";

  final int sonAktifSezonId;
  final int sonAktifOkulId;
  final String strTarih;
  final String nTarih;
  DerslikListesiGosterScreen({
    this.sonAktifSezonId,
    this.sonAktifOkulId,
    this.strTarih,
    this.nTarih,
  });
  @override
  _DerslikListesiGosterScreenState createState() =>
      _DerslikListesiGosterScreenState();
}

class _DerslikListesiGosterScreenState
    extends State<DerslikListesiGosterScreen> {
  DerslikList list;

  var id, sinifID, derslikAd, sinifAd;
  @override
  void initState() {
    
    if (widget.sonAktifSezonId != null &&
        widget.sonAktifOkulId != null &&
        widget.strTarih != null &&
        widget.nTarih != null) {
      // send token server
      ApiService()
          .getDerslikListesi(
        widget.sonAktifSezonId,
        widget.sonAktifOkulId,
        widget.strTarih,
        widget.nTarih,
      )
          .then(
        (value) {
          loadingHide(context);
          if (value == null) {
            showCustomDialog(context,
                title: "Giriş Hatası", subTitle: value.toString());
          } else {
            list = value;
            print(list);
            id = list.derslerinListesi[0].id;
            sinifID = list.derslerinListesi[0].sinifID;
            derslikAd = list.derslerinListesi[0].derslikAd;
            sinifAd = list.derslerinListesi[0].sinifAd;
            
            
          }
        },
      );
    } else {
      showCustomDialog(context,
          title: "Giriş Hatası",
          subTitle: "Lütfen kullanıcı adı ve şifre giriniz");
    }

    super.initState();
  }

  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Derslik Listesi'),
        ),
        body: Column(
          children: [
            Text('${derslikAd}'),
            Text('${sinifAd}'),
          ],
        ));
  }
}

我怎样才能解决这个问题?

4

2 回答 2

1

错误可能在这里:

class DerslikListesiModel {
  int id;
  String derslikAd;
  String sinifID; <-- this should be an int
  String sinifAd;
}
于 2020-10-20T14:55:30.470 回答
0

尝试在 DerslikListesiModel 类中将类型 sinifID 从 String 更改为 int

  int sinifID;
于 2020-10-20T14:53:31.020 回答