// Assumiamo che le classi Coordinates e Row siano definite // in file separati import 'coordinates.dart'; import 'row.dart'; class Vineyard { final int id; final String name; final String location; final double hectares; final Coordinates? coordinates; final DateTime creationDate; final List? rows; final Map? area; // Costruttore con parametri nominati. // 'rows' è opzionale perché è nullable. Vineyard({ required this.id, required this.name, required this.location, required this.hectares, this.coordinates, required this.creationDate, this.rows, this.area, }); // --- /// Converte l'oggetto Vineyard in una mappa per la serializzazione JSON. Map toJson() { return { 'id': id, 'name': name, 'location': location, 'hectares': hectares, 'coordinates': coordinates?.toJson(), 'creationDate': creationDate.toIso8601String(), // Se 'rows' non è null, lo converte in una lista di mappe JSON 'rows': rows?.map((row) => row.toJson()).toList(), // Converte la mappa 'area' 'area': area?.map((key, value) => MapEntry(key.toString(), value.toJson())), }; } /// Crea un oggetto Vineyard da una mappa (es. da una risposta JSON). factory Vineyard.fromJson(Map json) { try{ // Gestione della lista di 'rows' final List? rowsJson = json['rows']; final List? rowsList = rowsJson?.map((json) => Row.fromJson(json as Map)).toList(); // Gestione della mappa 'area' final Map areaJson = json['area'] as Map; final Map areaMap = areaJson.map( (key, value) => MapEntry( int.parse(key as String), // Converte la chiave da String a int Coordinates.fromJson(value as Map), ), ); return Vineyard( id: json['id'] as int, name: json['name'] as String, location: json['location'] as String, hectares: (json['hectares'] as num).toDouble(), coordinates: null,//Coordinates.fromJson(json['coordinates'] as Map), creationDate: DateTime.parse(json['creationDate'] as String), rows: rowsList, area: areaMap, ); } catch (e) { print('Errore durante la deserializzazione dell\'oggetto Vineyard: $e'); return Vineyard( id: 0, name: '', location: '', hectares: 0.0, coordinates: null, creationDate: DateTime.now(), rows: [], area: {}, ); // Restituisce un oggetto Vineyard vuoto in caso di errore } } }