Mon expérience fromJson Directus

Hello World !

après avoir galéré quelques heures sur la récupération d’un Json Directus, je vous propose ma solution.

Si ca peut aider quelqu’un…
(après recherche dans le forum, je me suis rendu compte que je n’étais pas le seul à mettre casser les dents) :slight_smile:

Voici la réponse que j’obtiens d’un get items Directus :

{
"data":[
   {
      "id":"94e4642f-364e-4105-9a1a-b1dddeaa01a9",
      "titre":"mission 1",
      "adresse":"xxxxx",
      "ville":"xxxxxx",
      "coordonnees":{
         "type":"Point",
         "coordinates":[
            7.88602288229373,
            45.43744050132946
         ]
      },
      "details":"rere",
...

voici mon modèle Coordonnées : (qui m’a posé problème… une liste de double)

class Coordonnees {
  final String type;
  final List<double> coordinates;

  Coordonnees({required this.type, required this.coordinates});

  factory Coordonnees.fromJson(Map<String, dynamic> parsedJson) {
    var coordinatesFromJson = parsedJson['coordinates'];
    List<double> coordinatesList = coordinatesFromJson.cast<double>();
    return Coordonnees(
      type: parsedJson['type'],
      coordinates: coordinatesList,
    );
  }
}

voici mon modèle principal :

import 'coordonnees.dart';

class Mission {
  final String id;
  final String titre;
  final Coordonnees coordonnees;
  Mission({required this.id, required this.titre, required this.coordonnees});

  factory Mission.fromJson(Map<String, dynamic> json) => Mission(
      id: json["id"],
      titre: json["titre"],
      coordonnees: Coordonnees.fromJson(json['coordonnees']));
}

Et pour finir, ma méthode d’appel à l’api :

  Future<List<Mission>> getMissions() async {
    var uri = Uri.parse(
        "https://api.xxxxx.com/items/missions/?fields=*,partenaire.*,type_mission.*");
    final response = await http.get(uri);
    if (response.statusCode == 200) {
      final json = jsonDecode(response.body);
      final missionsJson = json['data'] as List;

      List<Mission> missions = missionsJson.map((i) => Mission.fromJson(i)).toList();

      return missions;
    } else {
      throw Exception("Erreur de chargement des données");
    }
  }

Ok Ok je n’utilise pas encore la bibliothèque de Maxime !!! mais j’ai du mal à trouver des exemples :frowning:

1 « J'aime »

Voici un exemple, c’est sur le Github de Maxime :slight_smile: https://github.com/maxbritto/directus_api_manager/blob/main/example/directus_api_manager_example.dart

1 « J'aime »