feat(materiel): connect catalogue and detail to api
This commit is contained in:
@@ -4,6 +4,7 @@ import "package:flutter/material.dart";
|
||||
/// (données statiques pour l'instant ; sera alimenté par l'API plus tard).
|
||||
class MaterielItem {
|
||||
const MaterielItem({
|
||||
required this.id,
|
||||
required this.nom,
|
||||
required this.categorie,
|
||||
required this.marque,
|
||||
@@ -16,6 +17,28 @@ class MaterielItem {
|
||||
required this.icon,
|
||||
});
|
||||
|
||||
/// Construit un MaterielItem depuis la réponse JSON du catalogue.
|
||||
/// Les champs non fournis par cet endpoint (accessoires, icône) sont complétés.
|
||||
factory MaterielItem.fromJson(Map<String, dynamic> json) {
|
||||
final categorie = (json["categorie"] as Map<String, dynamic>)["nom"] as String;
|
||||
final campus = json["campus"] as Map<String, dynamic>?;
|
||||
final accessoires = json["accessoires"] as List<dynamic>?;
|
||||
return MaterielItem(
|
||||
id: json["id"] as int,
|
||||
nom: json["nom"] as String,
|
||||
categorie: categorie,
|
||||
marque: json["marque"] as String,
|
||||
modele: json["modele"] as String,
|
||||
reference: json["reference"] as String,
|
||||
campus: campus == null ? "Saint-Christophe · Cergy" : "${campus["nom"]} · ${campus["ville"]}",
|
||||
etatGeneral: json["etatGeneral"] as String,
|
||||
disponible: json["statut"] == "DISPONIBLE",
|
||||
accessoires: accessoires == null ? const <String>[] : accessoires.cast<String>(),
|
||||
icon: iconePourCategorie(categorie),
|
||||
);
|
||||
}
|
||||
|
||||
final int id;
|
||||
final String nom;
|
||||
final String categorie;
|
||||
final String marque;
|
||||
@@ -27,3 +50,23 @@ class MaterielItem {
|
||||
final List<String> accessoires;
|
||||
final IconData icon;
|
||||
}
|
||||
|
||||
/// Déduit une icône à partir du nom de catégorie renvoyé par l'API.
|
||||
IconData iconePourCategorie(String categorie) {
|
||||
switch (categorie) {
|
||||
case "Ordinateur portable":
|
||||
return Icons.laptop_mac;
|
||||
case "Vidéoprojecteur":
|
||||
return Icons.videocam_outlined;
|
||||
case "Tablette":
|
||||
return Icons.tablet_mac;
|
||||
case "Caméra":
|
||||
return Icons.photo_camera_outlined;
|
||||
case "Périphérique audio":
|
||||
return Icons.headphones;
|
||||
case "Câble / Adaptateur":
|
||||
return Icons.cable;
|
||||
default:
|
||||
return Icons.inventory_2_outlined;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user