import 'package:equatable/equatable.dart'; class AssetModel extends Equatable { final String isin; final String symbol; final String name; final double currentPrice; final String currency; final String exchange; final List exchanges; final List tickers; final String image; const AssetModel({ required this.isin, required this.symbol, required this.name, this.currentPrice = 0.0, required this.currency, required this.exchange, required this.exchanges, required this.tickers, required this.image, }); factory AssetModel.fromJson(Map json) { double parseDouble(dynamic val) { if (val == null) return 0.0; if (val is num) return val.toDouble(); return double.tryParse(val.toString()) ?? 0.0; } return AssetModel( isin: json['isin']?.toString() ?? '', symbol: json['symbol']?.toString() ?? '', name: json['name']?.toString() ?? '', currentPrice: parseDouble(json['price'] ?? json['currentPrice']), currency: json['currency']?.toString() ?? 'EUR', exchange: json['exchange']?.toString() ?? 'XETRA', exchanges: (json['exchanges'] as List?)?.map((e) => e.toString()).toList() ?? [], tickers: (json['tickers'] as List?) ?.map((t) => AssetTickerOption.fromJson(t)) .toList() ?? [], image: json['image']?.toString() ?? '', ); } Map toJson() { return { 'isin': isin, 'symbol': symbol, 'name': name, 'currentPrice': currentPrice, 'currency': currency, 'exchange': exchange, 'exchanges': exchanges, 'tickers': tickers.map((t) => t.toJson()).toList(), 'image': image, }; } @override List get props => [isin, symbol, name, currentPrice, currency, exchange, exchanges, tickers, image]; } class AssetTickerOption extends Equatable { final String ticker; final String exchange; final String tradingCurrency; final double currentPrice; const AssetTickerOption({ required this.ticker, required this.exchange, required this.tradingCurrency, required this.currentPrice, }); factory AssetTickerOption.fromJson(Map json) { double parseDouble(dynamic val) { if (val == null) return 0.0; if (val is num) return val.toDouble(); return double.tryParse(val.toString()) ?? 0.0; } return AssetTickerOption( ticker: json['ticker']?.toString() ?? '', exchange: json['exchange']?.toString() ?? 'XETRA', tradingCurrency: json['tradingCurrency']?.toString() ?? json['currency']?.toString() ?? 'EUR', currentPrice: parseDouble(json['currentPrice'] ?? json['price']), ); } Map toJson() { return { 'ticker': ticker, 'exchange': exchange, 'tradingCurrency': tradingCurrency, 'currentPrice': currentPrice, }; } @override List get props => [ticker, exchange, tradingCurrency, currentPrice]; }