Je suis confronté au même problème depuis que je commence à coder hier sur mon projet qui fait partie de l'obtention de certaines données JSON à partir d'une API donnée.
Mon lien API est: http://alkadhum-col.edu.iq/wp-json/wp/v2/posts?_embed
Je travaille sur Flutter SDK et je suis confus pourquoi cela ne fonctionne pas avec moi!, Mon travail consiste à obtenir uniquement des objets de lien, de titre et de source_url, mais je ne peux pas l'obtenir. P>
J'ai essayé le code suivant dans la documentation de la batterie
https://flutter.dev/docs/Cookbook/Networking/fetch-Data
Et après que certaines modifications selon mes besoins n'avaient aucune donnée. i seulement eu le message ci-dessous: Toute aide sera appréciée. de
p>
Liste de type dynamique n'est pas un sous-type de type de type de type, dynamique B>
P>
Merci d'avance. P> p>
4 Réponses :
Essayez ci-dessous Code:
factory Post.fromMap(Map<String, dynamic> json) {
return Post(
id: json['id'],
title: json['title'].cast<String>(),
link: json['link'].cast<String>()
);
}
Votre réponse JSON est de type classe de haricots p> < img src = "https://i.stack.imgur.com/qyj2j.png" alt = "Entrez la description de l'image ici"> p> p> Liste chaîne de carte, dynamique code> mais vous pouvez faire quelque chose comme ça
Je reçois 14 erreurs et cela ne fonctionne pas pour moi, le nom de nom n'est pas un type et il ne peut pas être utilisé comme argument de type. C'est l'une des erreurs.
Ajout de Posthome à RunApp dans la fonction principale et cela fonctionne bien maintenant.
Comment puis-je les imprimer à l'écran non seulement dans la console?
Vous devez utiliser la liste des utilisateurs à l'intérieur de votre vue.
Comment utiliser cela?
Vous devez changer votre classe. Vous devez créer votre structure de classe selon la réponse JSON. Puis, dans votre méthode API. Comme la réponse, vous obtenez est un tableau JSON. Donc, prenez-le dans une liste et jetez la réponse dans votre classe JSON. P> Vous pouvez toujours utiliser des outils tels que https://javiercbk.github.io/json_to_dart/ Pour créer des cours de DART à partir de JSON complexe. Qui économise beaucoup de temps. P> p>
**Create Api Class**
class ApiUtils {
static String baseUrl = "http://example/";
}
**Create Model**
class EventModel {
String title;
EventModel({this.title});
EventModel.fromJson(Map<String, dynamic> json) {
title = json['Title'] ?? "";
}
}
**Create Service**
import 'package:http/http.dart' as http;
import 'package:NoticeModel.dart';
import 'dart:convert';
class NoticeService {
bool error = false;
bool loading = true;
var notice;
bool noticeDetailserror = false;
bool noticeetailsloading = true;
Future<void> getNotice(dynamic input) async {
try {
noticeDetailserror = false;
http.Response response = await http.post(ApiUtils.noticeApi,
body: input, headers: {'Content-type': 'application/json'});
Map data = jsonDecode(response.body);
if (data["Status"] == true) {
notice = data["Data"];
notice = notice.map((_data) {
return new NoticeModel.fromJson(_data);
}).toList();
print(notice);
noticeetailsloading = false;
} else {
throw data;
}
} catch (e) {
print(e);
noticeetailsloading = false;
noticeDetailserror = true;
}
}
}
**Main Page**
var body =
json.encode({"IsActive": true, "IsDelete": false, "CompanyId": 18});
List<dynamic> data;
var count = 0;
bool loading = true;
bool error = false;
void getNoticeDetails() async {
setState(() {
error = false;
loading = true;
});
// SharedPreferences prefs = await SharedPreferences.getInstance();
NoticeService instance = NoticeService();
await instance.getNotice(body);
data = instance.notice;
if (instance.noticeDetailserror == false) {
setState(() {
count = data.length;
loading = false;
});
} else {
setState(() {
loading = false;
error = true;
});
Toast.show("Error Getting Data", context,
duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
}
}
@override
void initState() {
super.initState();
getNoticeDetails();
}
body: loading == true
? LinearProgressIndicator()
: error == true
? RetryWidget(
onRetry: getNoticeDetails,
)
: SafeArea(
SizedBox(
width: 270,
child: Text(
data[index].title ?? "",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 18,
color: Colors.grey,
fontWeight: FontWeight.bold,
),
),
),
)