#flutter
Вопрос:
Я новичок в программировании на Flutter и сейчас пытаюсь получить данные из restapi. Я получаю этот тип ошибки 'list<dynamic>' is not a subtype of type 'string'
и в отладке
Есть какое-нибудь решение?
аписервис:
Future<List<Petani>> getDafPet() async {
final response = await client.get("http://10.0.2.2:8000/api/dafPetani");
if (response.statusCode == 200) {
return petaniFromJson(response.body);
} else {
return null;
}
}
дротик:
FutureBuilder(
future: ApiServices().getDafPet(),
builder: (BuildContext context, AsyncSnapshot<List<Petani>> snapshot){
if(snapshot.hasError){
return Center(
child: Text(
"Something wrong with message : ${snapshot.error.toString()}",
style: TextStyle(
color: Color(0xFFAB47BC),
),
textAlign: TextAlign.center,
),
);
}else if(snapshot.connectionState == ConnectionState.done){
lptn = snapshot.data;
return ListView.builder(
itemBuilder: (context, position){
return Card(
margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
shadowColor: Color(0xFFBA68C8),
elevation: 2.0,
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
child: Container(
padding: EdgeInsets.fromLTRB(5, 2.5, 5, 2.5),
margin: EdgeInsets.fromLTRB(2.5, 2.5, 2.5, 2.5),
child: ListTile(
title: Text(
//lDsn[position].nik
lptn[position].nama,
style: TextStyle(
color: Color(0xFFAB47BC),
fontWeight: FontWeight.bold,
),
),
subtitle: Text(
lptn[position].nama,
style: TextStyle(
color: Colors.black54,
fontSize: 13,
),
),
trailing: IconButton(
icon: Icon(
Icons.arrow_forward_ios_rounded,
color: Colors.black26,
size: 20,
),
onPressed: (){
//pindah ke menu Daftar Jadwal Dosen
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => DaftarJadwalDosen(title: "Daftar Slot Jadwal Dosen",
// nik: lDsn[position].nik, dsn: lDsn[position], nim_login: this.nim_login,)),).then(onGoBack);
},
),
),
),
);
},
itemCount: lptn.length,
);
}
Данные JSON:
[
{
"ID_User": "00",
"nama": "Test Ganti",
"jenis_kelamin": 0,
"tanggal_lahir": "0000-00-00",
"alamat": "",
"provinsi": "",
"kabupaten": "",
"kecamatan": "",
"kelurahan_desa": "",
"nomor_telpon": "14022",
"Email": "test1@gmail.com",
"Foto": ""
},
{
"ID_User": "000",
"nama": "Test Jawaban",
"jenis_kelamin": 0,
"tanggal_lahir": "0000-00-00",
"alamat": "",
"provinsi": "",
"kabupaten": "",
"kecamatan": "",
"kelurahan_desa": "",
"nomor_telpon": "080989999",
"Email": "a@jawab.id",
"Foto": ""
},
{
"ID_User": "003",
"nama": "test Jawaban 3",
"jenis_kelamin": 0,
"tanggal_lahir": "0000-00-00",
"alamat": "",
"provinsi": "",
"kabupaten": "",
"kecamatan": "",
"kelurahan_desa": "",
"nomor_telpon": "1234",
"Email": "c@c.id",
"Foto": ""
},
Комментарии:
1. поделитесь своим кодом
2. просто отредактировал сообщение
3. можете ли вы расшифровать данные своего ответа
4. можете ли вы добавить функцию petaniFromJson ()?
5. Список<Петани> Петанифромджсон(строка jsonData) { окончательные данные = json.декодировать(jsonData); печать(«Данные =» данные); возвращаемый список<Петани><Петани>.из(data.map((элемент) =<Петани>> Петани.из Json(элемент))); }
Ответ №1:
Вы можете попробовать с этим
Future<List<Petani>> getDafPet() async {
final response = await client.get("http://10.0.2.2:8000/api/dafPetani");
if (response.statusCode == 200) {
var data = json.decode(response.body);
List<Petani> itemList = [];
data.map(( item) {
itemList.add(Petani.fromJson(item));
}).toList();
return itemList;
} else {
return null;
}
Комментарии:
1. все так же, как и раньше
2. класс Петани { Идентификатор строки; Пароль строки; Имя строки; int jenis_kelamin; Строка tanggal_lahir; Строка alamat; Строка provinsi; Строка nomor_telpon; Строка электронной почты; Строка jum_pekerja; Строка jum_lahan;
3. обновил свой ответ, пожалуйста, посмотрите, и он работает на моей машине
4. он по-прежнему возвращает тип » список<динамический>», который не является подтипом типа «строка».
5. отредактировал мой ответ, пожалуйста, попробуйте