0
votes

Comment obtenir des données JSON d'une API en flutter

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.

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.
xxx

i seulement eu le message ci-dessous:
Liste de type dynamique n'est pas un sous-type de type de type de type, dynamique

Toute aide sera appréciée. de
Merci d'avance.


0 commentaires

4 Réponses :


-1
votes

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>()
  );
}


0 commentaires

6
votes

Votre réponse JSON est de type Liste mais vous prenez la réponse dans chaîne de carte, dynamique mais vous pouvez faire quelque chose comme ça xxx

classe de haricots xxx

< img src = "https://i.stack.imgur.com/qyj2j.png" alt = "Entrez la description de l'image ici">


5 commentaires

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?



0
votes

Vous devez changer votre classe. Vous devez créer votre structure de classe selon la réponse JSON. XXX

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. xxx

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.


0 commentaires

-1
votes
**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,
                                            ),
                                          ),
                                        ),
    )

0 commentaires