class ChatFolder { final String id; final String title; final String? emoji; final List? include; final List filters; final bool hideEmpty; final List widgets; final List? favorites; final Map? filterSubjects; final List? options; ChatFolder({ required this.id, required this.title, this.emoji, this.include, required this.filters, required this.hideEmpty, required this.widgets, this.favorites, this.filterSubjects, this.options, }); factory ChatFolder.fromJson(Map json) { return ChatFolder( id: json['id']?.toString() ?? '', title: json['title']?.toString() ?? '', emoji: json['emoji']?.toString(), include: (json['include'] as List?) ?.map((e) { if (e is int) return e; if (e is String) return int.tryParse(e) ?? 0; return 0; }) .toList(), filters: (json['filters'] as List?) ?.map((e) { if (e is int) return e; if (e is String) return int.tryParse(e) ?? e; return e; }) .toList() ?? [], hideEmpty: json['hideEmpty'] ?? false, widgets: (json['widgets'] as List?) ?.map((w) { if (w is Map) { return ChatFolderWidget.fromJson(w); } return ChatFolderWidget.fromJson( Map.from(w as Map), ); }) .toList() ?? [], favorites: (json['favorites'] as List?) ?.map((e) { if (e is int) return e; if (e is String) return int.tryParse(e) ?? 0; return 0; }) .toList(), filterSubjects: json['filterSubjects'] is Map ? json['filterSubjects'] as Map : (json['filterSubjects'] is Map ? Map.from( (json['filterSubjects'] as Map).cast(), ) : null), options: (json['options'] as List?) ?.map((e) { if (e is int) return e; if (e is String) return int.tryParse(e) ?? 0; return 0; }) .toList(), ); } Map toJson() => { 'id': id, 'title': title, if (emoji != null) 'emoji': emoji, if (include != null) 'include': include, 'filters': filters, 'hideEmpty': hideEmpty, 'widgets': widgets.map((w) => w.toJson()).toList(), if (favorites != null) 'favorites': favorites, if (filterSubjects != null) 'filterSubjects': filterSubjects, if (options != null) 'options': options, }; } class ChatFolderWidget { final int id; final String name; final String description; final String? iconUrl; final String? url; final String? startParam; final String? background; final int? appId; ChatFolderWidget({ required this.id, required this.name, required this.description, this.iconUrl, this.url, this.startParam, this.background, this.appId, }); factory ChatFolderWidget.fromJson(Map json) { final rawId = json['id']; return ChatFolderWidget( id: rawId is int ? rawId : int.tryParse(rawId?.toString() ?? '') ?? 0, name: json['name']?.toString() ?? '', description: json['description']?.toString() ?? '', iconUrl: json['iconUrl']?.toString(), url: json['url']?.toString(), startParam: json['startParam']?.toString(), background: json['background']?.toString(), appId: json['appId'] is int ? json['appId'] as int : int.tryParse(json['appId']?.toString() ?? ''), ); } Map toJson() => { 'id': id, 'name': name, 'description': description, if (iconUrl != null) 'iconUrl': iconUrl, if (url != null) 'url': url, if (startParam != null) 'startParam': startParam, if (background != null) 'background': background, if (appId != null) 'appId': appId, }; }