我正在尝试做一个包含 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/<…>
[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}'),
],
));
}
}
我怎样才能解决这个问题?