import "package:flutter/material.dart"; import "../demo_identity.dart"; /// Représentation d'un matériel affiché dans le catalogue et son détail /// à partir des réponses API. class MaterielItem { const MaterielItem({ required this.id, required this.nom, required this.categorie, required this.marque, required this.modele, required this.reference, required this.campus, required this.etatGeneral, required this.disponible, required this.accessoires, 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 json) { final categorie = (json["categorie"] as Map)["nom"] as String; final campus = json["campus"] as Map?; final accessoires = json["accessoires"] as List?; 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 ? DemoIdentity.campusTag : "${campus["nom"]} · ${campus["ville"]}", etatGeneral: json["etatGeneral"] as String, disponible: json["statut"] == "DISPONIBLE", accessoires: accessoires == null ? const [] : accessoires.cast(), icon: iconePourCategorie(categorie), ); } final int id; final String nom; final String categorie; final String marque; final String modele; final String reference; final String campus; final String etatGeneral; final bool disponible; final List 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; } }