// Author: fengshengxiong // Date: 2024/6/18 // Description: Browse-首页模型 import 'dart:convert'; class BrowseModel { ResponseContext? responseContext; Contents? contents; ContinuationContents? continuationContents; String? trackingParams; Microformat? microformat; int? maxAgeStoreSeconds; ThumbnailClass? background; BrowseModel({ this.responseContext, this.contents, this.continuationContents, this.trackingParams, this.maxAgeStoreSeconds, this.background, }); factory BrowseModel.fromJson(String str) => BrowseModel.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory BrowseModel.fromMap(Map json) => BrowseModel( responseContext: json["responseContext"] == null ? null : ResponseContext.fromMap(json["responseContext"]), contents: json["contents"] == null ? null : Contents.fromMap(json["contents"]), continuationContents: json["continuationContents"] == null ? null : ContinuationContents.fromMap(json["continuationContents"]), trackingParams: json["trackingParams"], maxAgeStoreSeconds: json["maxAgeStoreSeconds"], background: json["background"] == null ? null : ThumbnailClass.fromMap(json["background"]), ); Map toMap() => { "responseContext": responseContext?.toMap(), "contents": contents?.toMap(), "continuationContents": continuationContents?.toMap(), "trackingParams": trackingParams, "maxAgeStoreSeconds": maxAgeStoreSeconds, "background": background?.toMap(), }; } class ThumbnailClass { MusicThumbnailRenderer? musicThumbnailRenderer; ThumbnailClass({ this.musicThumbnailRenderer, }); factory ThumbnailClass.fromJson(String str) => ThumbnailClass.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ThumbnailClass.fromMap(Map json) => ThumbnailClass( musicThumbnailRenderer: json["musicThumbnailRenderer"] == null ? null : MusicThumbnailRenderer.fromMap(json["musicThumbnailRenderer"]), ); Map toMap() => { "musicThumbnailRenderer": musicThumbnailRenderer?.toMap(), }; } class MusicThumbnailRenderer { MusicThumbnailRendererThumbnail? thumbnail; String? thumbnailCrop; String? thumbnailScale; String? trackingParams; MusicThumbnailRenderer({ this.thumbnail, this.thumbnailCrop, this.thumbnailScale, this.trackingParams, }); factory MusicThumbnailRenderer.fromJson(String str) => MusicThumbnailRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicThumbnailRenderer.fromMap(Map json) => MusicThumbnailRenderer( thumbnail: json["thumbnail"] == null ? null : MusicThumbnailRendererThumbnail.fromMap(json["thumbnail"]), thumbnailCrop: json["thumbnailCrop"], thumbnailScale: json["thumbnailScale"], trackingParams: json["trackingParams"], ); Map toMap() => { "thumbnail": thumbnail?.toMap(), "thumbnailCrop": thumbnailCrop, "thumbnailScale": thumbnailScale, "trackingParams": trackingParams, }; } class MusicThumbnailRendererThumbnail { List? thumbnails; MusicThumbnailRendererThumbnail({ this.thumbnails, }); factory MusicThumbnailRendererThumbnail.fromJson(String str) => MusicThumbnailRendererThumbnail.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicThumbnailRendererThumbnail.fromMap(Map json) => MusicThumbnailRendererThumbnail( thumbnails: json["thumbnails"] == null ? [] : List.from(json["thumbnails"]!.map((x) => ThumbnailElement.fromMap(x))), ); Map toMap() => { "thumbnails": thumbnails == null ? [] : List.from(thumbnails!.map((x) => x.toMap())), }; } class ThumbnailElement { String? url; int? width; int? height; ThumbnailElement({ this.url, this.width, this.height, }); factory ThumbnailElement.fromJson(String str) => ThumbnailElement.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ThumbnailElement.fromMap(Map json) => ThumbnailElement( url: json["url"], width: json["width"], height: json["height"], ); Map toMap() => { "url": url, "width": width, "height": height, }; } class Contents { SingleColumnBrowseResultsRenderer? singleColumnBrowseResultsRenderer; TwoColumnBrowseResultsRenderer? twoColumnBrowseResultsRenderer; Contents({ this.singleColumnBrowseResultsRenderer, this.twoColumnBrowseResultsRenderer, }); factory Contents.fromJson(String str) => Contents.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Contents.fromMap(Map json) => Contents( singleColumnBrowseResultsRenderer: json["singleColumnBrowseResultsRenderer"] == null ? null : SingleColumnBrowseResultsRenderer.fromMap(json["singleColumnBrowseResultsRenderer"]), twoColumnBrowseResultsRenderer: json["twoColumnBrowseResultsRenderer"] == null ? null : TwoColumnBrowseResultsRenderer.fromMap(json["twoColumnBrowseResultsRenderer"]), ); Map toMap() => { "singleColumnBrowseResultsRenderer": singleColumnBrowseResultsRenderer?.toMap(), "twoColumnBrowseResultsRenderer": twoColumnBrowseResultsRenderer?.toMap(), }; } class SingleColumnBrowseResultsRenderer { List? tabs; SingleColumnBrowseResultsRenderer({ this.tabs, }); factory SingleColumnBrowseResultsRenderer.fromJson(String str) => SingleColumnBrowseResultsRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SingleColumnBrowseResultsRenderer.fromMap(Map json) => SingleColumnBrowseResultsRenderer( tabs: json["tabs"] == null ? [] : List.from(json["tabs"]!.map((x) => Tab.fromMap(x))), ); Map toMap() => { "tabs": tabs == null ? [] : List.from(tabs!.map((x) => x.toMap())), }; } class Tab { TabRenderer? tabRenderer; Tab({ this.tabRenderer, }); factory Tab.fromJson(String str) => Tab.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Tab.fromMap(Map json) => Tab( tabRenderer: json["tabRenderer"] == null ? null : TabRenderer.fromMap(json["tabRenderer"]), ); Map toMap() => { "tabRenderer": tabRenderer?.toMap(), }; } class TabRenderer { Endpoint? endpoint; String? title; bool? selected; TabRendererContent? content; Icon? icon; String? tabIdentifier; String? trackingParams; TabRenderer({ this.endpoint, this.title, this.selected, this.content, this.icon, this.tabIdentifier, this.trackingParams, }); factory TabRenderer.fromJson(String str) => TabRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory TabRenderer.fromMap(Map json) => TabRenderer( endpoint: json["endpoint"] == null ? null : Endpoint.fromMap(json["endpoint"]), title: json["title"], selected: json["selected"], content: json["content"] == null ? null : TabRendererContent.fromMap(json["content"]), icon: json["icon"] == null ? null : Icon.fromMap(json["icon"]), tabIdentifier: json["tabIdentifier"], trackingParams: json["trackingParams"], ); Map toMap() => { "endpoint": endpoint?.toMap(), "title": title, "selected": selected, "content": content?.toMap(), "icon": icon?.toMap(), "tabIdentifier": tabIdentifier, "trackingParams": trackingParams, }; } class TabRendererContent { SectionList? sectionListRenderer; TabRendererContent({ this.sectionListRenderer, }); factory TabRendererContent.fromJson(String str) => TabRendererContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory TabRendererContent.fromMap(Map json) => TabRendererContent( sectionListRenderer: json["sectionListRenderer"] == null ? null : SectionList.fromMap(json["sectionListRenderer"]), ); Map toMap() => { "sectionListRenderer": sectionListRenderer?.toMap(), }; } class SectionList { List? contents; List? continuations; String? trackingParams; SectionListContinuationHeader? header; SectionList({ this.contents, this.continuations, this.trackingParams, this.header, }); factory SectionList.fromJson(String str) => SectionList.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SectionList.fromMap(Map json) => SectionList( contents: json["contents"] == null ? [] : List.from(json["contents"]!.map((x) => SectionListContinuationContent.fromMap(x))), continuations: json["continuations"] == null ? [] : List.from(json["continuations"]!.map((x) => Continuation.fromMap(x))), trackingParams: json["trackingParams"], header: json["header"] == null ? null : SectionListContinuationHeader.fromMap(json["header"]), ); Map toMap() => { "contents": contents == null ? [] : List.from(contents!.map((x) => x.toMap())), "continuations": continuations == null ? [] : List.from(continuations!.map((x) => x.toMap())), "trackingParams": trackingParams, "header": header?.toMap(), }; } class SectionListContinuationContent { MusicCarouselShelfRenderer? musicCarouselShelfRenderer; MusicTastebuilderShelfRenderer? musicTastebuilderShelfRenderer; MusicResponsiveHeaderRenderer? musicResponsiveHeaderRenderer; SectionListContinuationContent({ this.musicCarouselShelfRenderer, this.musicTastebuilderShelfRenderer, this.musicResponsiveHeaderRenderer, }); factory SectionListContinuationContent.fromJson(String str) => SectionListContinuationContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SectionListContinuationContent.fromMap(Map json) => SectionListContinuationContent( musicCarouselShelfRenderer: json["musicCarouselShelfRenderer"] == null ? null : MusicCarouselShelfRenderer.fromMap(json["musicCarouselShelfRenderer"]), musicTastebuilderShelfRenderer: json["musicTastebuilderShelfRenderer"] == null ? null : MusicTastebuilderShelfRenderer.fromMap(json["musicTastebuilderShelfRenderer"]), musicResponsiveHeaderRenderer: json["musicResponsiveHeaderRenderer"] == null ? null : MusicResponsiveHeaderRenderer.fromMap(json["musicResponsiveHeaderRenderer"]), ); Map toMap() => { "musicCarouselShelfRenderer": musicCarouselShelfRenderer?.toMap(), "musicTastebuilderShelfRenderer": musicTastebuilderShelfRenderer?.toMap(), "musicResponsiveHeaderRenderer": musicResponsiveHeaderRenderer?.toMap(), }; } class MusicCarouselShelfRenderer { MusicCarouselShelfRendererHeader? header; List? contents; String? trackingParams; String? itemSize; String? numItemsPerColumn; MusicCarouselShelfRenderer({ this.header, this.contents, this.trackingParams, this.itemSize, this.numItemsPerColumn, }); factory MusicCarouselShelfRenderer.fromJson(String str) => MusicCarouselShelfRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicCarouselShelfRenderer.fromMap(Map json) => MusicCarouselShelfRenderer( header: json["header"] == null ? null : MusicCarouselShelfRendererHeader.fromMap(json["header"]), contents: json["contents"] == null ? [] : List.from(json["contents"]!.map((x) => MusicCarouselShelfRendererContent.fromMap(x))), trackingParams: json["trackingParams"], itemSize: json["itemSize"], numItemsPerColumn: json["numItemsPerColumn"], ); Map toMap() => { "header": header?.toMap(), "contents": contents == null ? [] : List.from(contents!.map((x) => x.toMap())), "trackingParams": trackingParams, "itemSize": itemSize, "numItemsPerColumn": numItemsPerColumn, }; } class MusicCarouselShelfRendererContent { MusicResponsiveListItemRenderer? musicResponsiveListItemRenderer; MusicTwoRowItemRenderer? musicTwoRowItemRenderer; MusicCarouselShelfRendererContent({ this.musicResponsiveListItemRenderer, this.musicTwoRowItemRenderer, }); factory MusicCarouselShelfRendererContent.fromJson(String str) => MusicCarouselShelfRendererContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicCarouselShelfRendererContent.fromMap(Map json) => MusicCarouselShelfRendererContent( musicResponsiveListItemRenderer: json["musicResponsiveListItemRenderer"] == null ? null : MusicResponsiveListItemRenderer.fromMap(json["musicResponsiveListItemRenderer"]), musicTwoRowItemRenderer: json["musicTwoRowItemRenderer"] == null ? null : MusicTwoRowItemRenderer.fromMap(json["musicTwoRowItemRenderer"]), ); Map toMap() => { "musicResponsiveListItemRenderer": musicResponsiveListItemRenderer?.toMap(), "musicTwoRowItemRenderer": musicTwoRowItemRenderer?.toMap(), }; } class MusicResponsiveListItemRenderer { String? trackingParams; ThumbnailClass? thumbnail; Overlay? overlay; List? flexColumns; List? fixedColumns; MusicResponsiveListItemRendererMenu? menu; PlaylistItemData? playlistItemData; String? flexColumnDisplayStyle; String? itemHeight; MusicResponsiveListItemRenderer({ this.trackingParams, this.thumbnail, this.overlay, this.flexColumns, this.fixedColumns, this.menu, this.playlistItemData, this.flexColumnDisplayStyle, this.itemHeight, }); factory MusicResponsiveListItemRenderer.fromJson(String str) => MusicResponsiveListItemRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicResponsiveListItemRenderer.fromMap(Map json) => MusicResponsiveListItemRenderer( trackingParams: json["trackingParams"], thumbnail: json["thumbnail"] == null ? null : ThumbnailClass.fromMap(json["thumbnail"]), overlay: json["overlay"] == null ? null : Overlay.fromMap(json["overlay"]), flexColumns: json["flexColumns"] == null ? [] : List.from(json["flexColumns"]!.map((x) => FlexColumn.fromMap(x))), fixedColumns: json["fixedColumns"] == null ? [] : List.from(json["fixedColumns"]!.map((x) => FixedColumn.fromMap(x))), menu: json["menu"] == null ? null : MusicResponsiveListItemRendererMenu.fromMap(json["menu"]), playlistItemData: json["playlistItemData"] == null ? null : PlaylistItemData.fromMap(json["playlistItemData"]), flexColumnDisplayStyle: json["flexColumnDisplayStyle"], itemHeight: json["itemHeight"], ); Map toMap() => { "trackingParams": trackingParams, "thumbnail": thumbnail?.toMap(), "overlay": overlay?.toMap(), "flexColumns": flexColumns == null ? [] : List.from(flexColumns!.map((x) => x.toMap())), "fixedColumns": fixedColumns == null ? [] : List.from(fixedColumns!.map((x) => x.toMap())), "menu": menu?.toMap(), "playlistItemData": playlistItemData?.toMap(), "flexColumnDisplayStyle": flexColumnDisplayStyle, "itemHeight": itemHeight, }; } class FlexColumn { MusicResponsiveListItemFlexColumnRenderer? musicResponsiveListItemFlexColumnRenderer; FlexColumn({ this.musicResponsiveListItemFlexColumnRenderer, }); factory FlexColumn.fromJson(String str) => FlexColumn.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FlexColumn.fromMap(Map json) => FlexColumn( musicResponsiveListItemFlexColumnRenderer: json["musicResponsiveListItemFlexColumnRenderer"] == null ? null : MusicResponsiveListItemFlexColumnRenderer.fromMap(json["musicResponsiveListItemFlexColumnRenderer"]), ); Map toMap() => { "musicResponsiveListItemFlexColumnRenderer": musicResponsiveListItemFlexColumnRenderer?.toMap(), }; } class MusicResponsiveListItemFlexColumnRenderer { Text? text; String? displayPriority; MusicResponsiveListItemFlexColumnRenderer({ this.text, this.displayPriority, }); factory MusicResponsiveListItemFlexColumnRenderer.fromJson(String str) => MusicResponsiveListItemFlexColumnRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicResponsiveListItemFlexColumnRenderer.fromMap(Map json) => MusicResponsiveListItemFlexColumnRenderer( text: json["text"] == null ? null : Text.fromMap(json["text"]), displayPriority: json["displayPriority"], ); Map toMap() => { "text": text?.toMap(), "displayPriority": displayPriority, }; } class Text { List? runs; Text({ this.runs, }); factory Text.fromJson(String str) => Text.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Text.fromMap(Map json) => Text( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => PurpleRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class PurpleRun { String? text; PurpleNavigationEndpoint? navigationEndpoint; PurpleRun({ this.text, this.navigationEndpoint, }); factory PurpleRun.fromJson(String str) => PurpleRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleRun.fromMap(Map json) => PurpleRun( text: json["text"], navigationEndpoint: json["navigationEndpoint"] == null ? null : PurpleNavigationEndpoint.fromMap(json["navigationEndpoint"]), ); Map toMap() => { "text": text, "navigationEndpoint": navigationEndpoint?.toMap(), }; } class PurpleNavigationEndpoint { String? clickTrackingParams; NavigationEndpointWatchEndpoint? watchEndpoint; PurpleBrowseEndpoint? browseEndpoint; PurpleNavigationEndpoint({ this.clickTrackingParams, this.watchEndpoint, this.browseEndpoint, }); factory PurpleNavigationEndpoint.fromJson(String str) => PurpleNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleNavigationEndpoint.fromMap(Map json) => PurpleNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], watchEndpoint: json["watchEndpoint"] == null ? null : NavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]), browseEndpoint: json["browseEndpoint"] == null ? null : PurpleBrowseEndpoint.fromMap(json["browseEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchEndpoint": watchEndpoint?.toMap(), "browseEndpoint": browseEndpoint?.toMap(), }; } class PurpleBrowseEndpoint { String? browseId; String? params; BrowseEndpointContextSupportedConfigs? browseEndpointContextSupportedConfigs; PurpleBrowseEndpoint({ this.browseId, this.params, this.browseEndpointContextSupportedConfigs, }); factory PurpleBrowseEndpoint.fromJson(String str) => PurpleBrowseEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleBrowseEndpoint.fromMap(Map json) => PurpleBrowseEndpoint( browseId: json["browseId"], params: json["params"], browseEndpointContextSupportedConfigs: json["browseEndpointContextSupportedConfigs"] == null ? null : BrowseEndpointContextSupportedConfigs.fromMap(json["browseEndpointContextSupportedConfigs"]), ); Map toMap() => { "browseId": browseId, "params": params, "browseEndpointContextSupportedConfigs": browseEndpointContextSupportedConfigs?.toMap(), }; } class BrowseEndpointContextSupportedConfigs { BrowseEndpointContextMusicConfig? browseEndpointContextMusicConfig; BrowseEndpointContextSupportedConfigs({ this.browseEndpointContextMusicConfig, }); factory BrowseEndpointContextSupportedConfigs.fromJson(String str) => BrowseEndpointContextSupportedConfigs.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory BrowseEndpointContextSupportedConfigs.fromMap(Map json) => BrowseEndpointContextSupportedConfigs( browseEndpointContextMusicConfig: json["browseEndpointContextMusicConfig"] == null ? null : BrowseEndpointContextMusicConfig.fromMap(json["browseEndpointContextMusicConfig"]), ); Map toMap() => { "browseEndpointContextMusicConfig": browseEndpointContextMusicConfig?.toMap(), }; } class BrowseEndpointContextMusicConfig { String? pageType; BrowseEndpointContextMusicConfig({ this.pageType, }); factory BrowseEndpointContextMusicConfig.fromJson(String str) => BrowseEndpointContextMusicConfig.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory BrowseEndpointContextMusicConfig.fromMap(Map json) => BrowseEndpointContextMusicConfig( pageType: json["pageType"], ); Map toMap() => { "pageType": pageType, }; } class NavigationEndpointWatchEndpoint { String? videoId; String? playlistId; String? params; LoggingContext? loggingContext; WatchEndpointMusicSupportedConfigs? watchEndpointMusicSupportedConfigs; NavigationEndpointWatchEndpoint({ this.videoId, this.playlistId, this.params, this.loggingContext, this.watchEndpointMusicSupportedConfigs, }); factory NavigationEndpointWatchEndpoint.fromJson(String str) => NavigationEndpointWatchEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory NavigationEndpointWatchEndpoint.fromMap(Map json) => NavigationEndpointWatchEndpoint( videoId: json["videoId"], playlistId: json["playlistId"], params: json["params"], loggingContext: json["loggingContext"] == null ? null : LoggingContext.fromMap(json["loggingContext"]), watchEndpointMusicSupportedConfigs: json["watchEndpointMusicSupportedConfigs"] == null ? null : WatchEndpointMusicSupportedConfigs.fromMap(json["watchEndpointMusicSupportedConfigs"]), ); Map toMap() => { "videoId": videoId, "playlistId": playlistId, "params": params, "loggingContext": loggingContext?.toMap(), "watchEndpointMusicSupportedConfigs": watchEndpointMusicSupportedConfigs?.toMap(), }; } class LoggingContext { VssLoggingContext? vssLoggingContext; LoggingContext({ this.vssLoggingContext, }); factory LoggingContext.fromJson(String str) => LoggingContext.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory LoggingContext.fromMap(Map json) => LoggingContext( vssLoggingContext: json["vssLoggingContext"] == null ? null : VssLoggingContext.fromMap(json["vssLoggingContext"]), ); Map toMap() => { "vssLoggingContext": vssLoggingContext?.toMap(), }; } class VssLoggingContext { String? serializedContextData; VssLoggingContext({ this.serializedContextData, }); factory VssLoggingContext.fromJson(String str) => VssLoggingContext.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory VssLoggingContext.fromMap(Map json) => VssLoggingContext( serializedContextData: json["serializedContextData"], ); Map toMap() => { "serializedContextData": serializedContextData, }; } class WatchEndpointMusicSupportedConfigs { WatchEndpointMusicConfig? watchEndpointMusicConfig; WatchEndpointMusicSupportedConfigs({ this.watchEndpointMusicConfig, }); factory WatchEndpointMusicSupportedConfigs.fromJson(String str) => WatchEndpointMusicSupportedConfigs.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory WatchEndpointMusicSupportedConfigs.fromMap(Map json) => WatchEndpointMusicSupportedConfigs( watchEndpointMusicConfig: json["watchEndpointMusicConfig"] == null ? null : WatchEndpointMusicConfig.fromMap(json["watchEndpointMusicConfig"]), ); Map toMap() => { "watchEndpointMusicConfig": watchEndpointMusicConfig?.toMap(), }; } class WatchEndpointMusicConfig { String? musicVideoType; WatchEndpointMusicConfig({ this.musicVideoType, }); factory WatchEndpointMusicConfig.fromJson(String str) => WatchEndpointMusicConfig.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory WatchEndpointMusicConfig.fromMap(Map json) => WatchEndpointMusicConfig( musicVideoType: json["musicVideoType"], ); Map toMap() => { "musicVideoType": musicVideoType, }; } class MusicResponsiveListItemRendererMenu { PurpleMenuRenderer? menuRenderer; MusicResponsiveListItemRendererMenu({ this.menuRenderer, }); factory MusicResponsiveListItemRendererMenu.fromJson(String str) => MusicResponsiveListItemRendererMenu.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicResponsiveListItemRendererMenu.fromMap(Map json) => MusicResponsiveListItemRendererMenu( menuRenderer: json["menuRenderer"] == null ? null : PurpleMenuRenderer.fromMap(json["menuRenderer"]), ); Map toMap() => { "menuRenderer": menuRenderer?.toMap(), }; } class PurpleMenuRenderer { List? items; String? trackingParams; List? topLevelButtons; Accessibility? accessibility; PurpleMenuRenderer({ this.items, this.trackingParams, this.topLevelButtons, this.accessibility, }); factory PurpleMenuRenderer.fromJson(String str) => PurpleMenuRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleMenuRenderer.fromMap(Map json) => PurpleMenuRenderer( items: json["items"] == null ? [] : List.from(json["items"]!.map((x) => PurpleItem.fromMap(x))), trackingParams: json["trackingParams"], topLevelButtons: json["topLevelButtons"] == null ? [] : List.from(json["topLevelButtons"]!.map((x) => TopLevelButton.fromMap(x))), accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]), ); Map toMap() => { "items": items == null ? [] : List.from(items!.map((x) => x.toMap())), "trackingParams": trackingParams, "topLevelButtons": topLevelButtons == null ? [] : List.from(topLevelButtons!.map((x) => x.toMap())), "accessibility": accessibility?.toMap(), }; } class Accessibility { AccessibilityData? accessibilityData; Accessibility({ this.accessibilityData, }); factory Accessibility.fromJson(String str) => Accessibility.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Accessibility.fromMap(Map json) => Accessibility( accessibilityData: json["accessibilityData"] == null ? null : AccessibilityData.fromMap(json["accessibilityData"]), ); Map toMap() => { "accessibilityData": accessibilityData?.toMap(), }; } class AccessibilityData { String? label; AccessibilityData({ this.label, }); factory AccessibilityData.fromJson(String str) => AccessibilityData.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory AccessibilityData.fromMap(Map json) => AccessibilityData( label: json["label"], ); Map toMap() => { "label": label, }; } class PurpleItem { MenuItemRenderer? menuNavigationItemRenderer; MenuItemRenderer? menuServiceItemRenderer; PurpleToggleMenuServiceItemRenderer? toggleMenuServiceItemRenderer; PurpleItem({ this.menuNavigationItemRenderer, this.menuServiceItemRenderer, this.toggleMenuServiceItemRenderer, }); factory PurpleItem.fromJson(String str) => PurpleItem.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleItem.fromMap(Map json) => PurpleItem( menuNavigationItemRenderer: json["menuNavigationItemRenderer"] == null ? null : MenuItemRenderer.fromMap(json["menuNavigationItemRenderer"]), menuServiceItemRenderer: json["menuServiceItemRenderer"] == null ? null : MenuItemRenderer.fromMap(json["menuServiceItemRenderer"]), toggleMenuServiceItemRenderer: json["toggleMenuServiceItemRenderer"] == null ? null : PurpleToggleMenuServiceItemRenderer.fromMap(json["toggleMenuServiceItemRenderer"]), ); Map toMap() => { "menuNavigationItemRenderer": menuNavigationItemRenderer?.toMap(), "menuServiceItemRenderer": menuServiceItemRenderer?.toMap(), "toggleMenuServiceItemRenderer": toggleMenuServiceItemRenderer?.toMap(), }; } class MenuItemRenderer { PrimaryText? text; Icon? icon; MenuNavigationItemRendererNavigationEndpoint? navigationEndpoint; String? trackingParams; ServiceEndpoint? serviceEndpoint; MenuItemRenderer({ this.text, this.icon, this.navigationEndpoint, this.trackingParams, this.serviceEndpoint, }); factory MenuItemRenderer.fromJson(String str) => MenuItemRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MenuItemRenderer.fromMap(Map json) => MenuItemRenderer( text: json["text"] == null ? null : PrimaryText.fromMap(json["text"]), icon: json["icon"] == null ? null : Icon.fromMap(json["icon"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : MenuNavigationItemRendererNavigationEndpoint.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], serviceEndpoint: json["serviceEndpoint"] == null ? null : ServiceEndpoint.fromMap(json["serviceEndpoint"]), ); Map toMap() => { "text": text?.toMap(), "icon": icon?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, "serviceEndpoint": serviceEndpoint?.toMap(), }; } class Icon { String? iconType; Icon({ this.iconType, }); factory Icon.fromJson(String str) => Icon.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Icon.fromMap(Map json) => Icon( iconType: json["iconType"], ); Map toMap() => { "iconType": iconType, }; } class MenuNavigationItemRendererNavigationEndpoint { String? clickTrackingParams; NavigationEndpointWatchEndpoint? watchEndpoint; ModalEndpoint? modalEndpoint; ShareEntityEndpoint? shareEntityEndpoint; PurpleBrowseEndpoint? browseEndpoint; WatchPlaylistEndpoint? watchPlaylistEndpoint; MenuNavigationItemRendererNavigationEndpoint({ this.clickTrackingParams, this.watchEndpoint, this.modalEndpoint, this.shareEntityEndpoint, this.browseEndpoint, this.watchPlaylistEndpoint, }); factory MenuNavigationItemRendererNavigationEndpoint.fromJson(String str) => MenuNavigationItemRendererNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MenuNavigationItemRendererNavigationEndpoint.fromMap(Map json) => MenuNavigationItemRendererNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], watchEndpoint: json["watchEndpoint"] == null ? null : NavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]), modalEndpoint: json["modalEndpoint"] == null ? null : ModalEndpoint.fromMap(json["modalEndpoint"]), shareEntityEndpoint: json["shareEntityEndpoint"] == null ? null : ShareEntityEndpoint.fromMap(json["shareEntityEndpoint"]), browseEndpoint: json["browseEndpoint"] == null ? null : PurpleBrowseEndpoint.fromMap(json["browseEndpoint"]), watchPlaylistEndpoint: json["watchPlaylistEndpoint"] == null ? null : WatchPlaylistEndpoint.fromMap(json["watchPlaylistEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchEndpoint": watchEndpoint?.toMap(), "modalEndpoint": modalEndpoint?.toMap(), "shareEntityEndpoint": shareEntityEndpoint?.toMap(), "browseEndpoint": browseEndpoint?.toMap(), "watchPlaylistEndpoint": watchPlaylistEndpoint?.toMap(), }; } class ModalEndpoint { Modal? modal; ModalEndpoint({ this.modal, }); factory ModalEndpoint.fromJson(String str) => ModalEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ModalEndpoint.fromMap(Map json) => ModalEndpoint( modal: json["modal"] == null ? null : Modal.fromMap(json["modal"]), ); Map toMap() => { "modal": modal?.toMap(), }; } class Modal { ModalWithTitleAndButtonRenderer? modalWithTitleAndButtonRenderer; Modal({ this.modalWithTitleAndButtonRenderer, }); factory Modal.fromJson(String str) => Modal.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Modal.fromMap(Map json) => Modal( modalWithTitleAndButtonRenderer: json["modalWithTitleAndButtonRenderer"] == null ? null : ModalWithTitleAndButtonRenderer.fromMap(json["modalWithTitleAndButtonRenderer"]), ); Map toMap() => { "modalWithTitleAndButtonRenderer": modalWithTitleAndButtonRenderer?.toMap(), }; } class ModalWithTitleAndButtonRenderer { PrimaryText? title; PrimaryText? content; Button? button; ModalWithTitleAndButtonRenderer({ this.title, this.content, this.button, }); factory ModalWithTitleAndButtonRenderer.fromJson(String str) => ModalWithTitleAndButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ModalWithTitleAndButtonRenderer.fromMap(Map json) => ModalWithTitleAndButtonRenderer( title: json["title"] == null ? null : PrimaryText.fromMap(json["title"]), content: json["content"] == null ? null : PrimaryText.fromMap(json["content"]), button: json["button"] == null ? null : Button.fromMap(json["button"]), ); Map toMap() => { "title": title?.toMap(), "content": content?.toMap(), "button": button?.toMap(), }; } class Button { ButtonButtonRenderer? buttonRenderer; Button({ this.buttonRenderer, }); factory Button.fromJson(String str) => Button.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Button.fromMap(Map json) => Button( buttonRenderer: json["buttonRenderer"] == null ? null : ButtonButtonRenderer.fromMap(json["buttonRenderer"]), ); Map toMap() => { "buttonRenderer": buttonRenderer?.toMap(), }; } class ButtonButtonRenderer { String? style; bool? isDisabled; PrimaryText? text; FluffyNavigationEndpoint? navigationEndpoint; String? trackingParams; ButtonButtonRenderer({ this.style, this.isDisabled, this.text, this.navigationEndpoint, this.trackingParams, }); factory ButtonButtonRenderer.fromJson(String str) => ButtonButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonButtonRenderer.fromMap(Map json) => ButtonButtonRenderer( style: json["style"], isDisabled: json["isDisabled"], text: json["text"] == null ? null : PrimaryText.fromMap(json["text"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : FluffyNavigationEndpoint.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], ); Map toMap() => { "style": style, "isDisabled": isDisabled, "text": text?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, }; } class FluffyNavigationEndpoint { String? clickTrackingParams; SignInEndpoint? signInEndpoint; FluffyNavigationEndpoint({ this.clickTrackingParams, this.signInEndpoint, }); factory FluffyNavigationEndpoint.fromJson(String str) => FluffyNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyNavigationEndpoint.fromMap(Map json) => FluffyNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], signInEndpoint: json["signInEndpoint"] == null ? null : SignInEndpoint.fromMap(json["signInEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "signInEndpoint": signInEndpoint?.toMap(), }; } class SignInEndpoint { bool? hack; SignInEndpoint({ this.hack, }); factory SignInEndpoint.fromJson(String str) => SignInEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SignInEndpoint.fromMap(Map json) => SignInEndpoint( hack: json["hack"], ); Map toMap() => { "hack": hack, }; } class PrimaryText { List? runs; PrimaryText({ this.runs, }); factory PrimaryText.fromJson(String str) => PrimaryText.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PrimaryText.fromMap(Map json) => PrimaryText( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => PrimaryTextRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class PrimaryTextRun { String? text; PrimaryTextRun({ this.text, }); factory PrimaryTextRun.fromJson(String str) => PrimaryTextRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PrimaryTextRun.fromMap(Map json) => PrimaryTextRun( text: json["text"], ); Map toMap() => { "text": text, }; } class ShareEntityEndpoint { String? serializedShareEntity; String? sharePanelType; ShareEntityEndpoint({ this.serializedShareEntity, this.sharePanelType, }); factory ShareEntityEndpoint.fromJson(String str) => ShareEntityEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ShareEntityEndpoint.fromMap(Map json) => ShareEntityEndpoint( serializedShareEntity: json["serializedShareEntity"], sharePanelType: json["sharePanelType"], ); Map toMap() => { "serializedShareEntity": serializedShareEntity, "sharePanelType": sharePanelType, }; } class WatchPlaylistEndpoint { String? playlistId; String? params; WatchPlaylistEndpoint({ this.playlistId, this.params, }); factory WatchPlaylistEndpoint.fromJson(String str) => WatchPlaylistEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory WatchPlaylistEndpoint.fromMap(Map json) => WatchPlaylistEndpoint( playlistId: json["playlistId"], params: json["params"], ); Map toMap() => { "playlistId": playlistId, "params": params, }; } class ServiceEndpoint { String? clickTrackingParams; QueueAddEndpoint? queueAddEndpoint; ServiceEndpoint({ this.clickTrackingParams, this.queueAddEndpoint, }); factory ServiceEndpoint.fromJson(String str) => ServiceEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ServiceEndpoint.fromMap(Map json) => ServiceEndpoint( clickTrackingParams: json["clickTrackingParams"], queueAddEndpoint: json["queueAddEndpoint"] == null ? null : QueueAddEndpoint.fromMap(json["queueAddEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "queueAddEndpoint": queueAddEndpoint?.toMap(), }; } class QueueAddEndpoint { QueueTarget? queueTarget; String? queueInsertPosition; List? commands; QueueAddEndpoint({ this.queueTarget, this.queueInsertPosition, this.commands, }); factory QueueAddEndpoint.fromJson(String str) => QueueAddEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory QueueAddEndpoint.fromMap(Map json) => QueueAddEndpoint( queueTarget: json["queueTarget"] == null ? null : QueueTarget.fromMap(json["queueTarget"]), queueInsertPosition: json["queueInsertPosition"], commands: json["commands"] == null ? [] : List.from(json["commands"]!.map((x) => Command.fromMap(x))), ); Map toMap() => { "queueTarget": queueTarget?.toMap(), "queueInsertPosition": queueInsertPosition, "commands": commands == null ? [] : List.from(commands!.map((x) => x.toMap())), }; } class Command { String? clickTrackingParams; AddToToastAction? addToToastAction; Command({ this.clickTrackingParams, this.addToToastAction, }); factory Command.fromJson(String str) => Command.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Command.fromMap(Map json) => Command( clickTrackingParams: json["clickTrackingParams"], addToToastAction: json["addToToastAction"] == null ? null : AddToToastAction.fromMap(json["addToToastAction"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "addToToastAction": addToToastAction?.toMap(), }; } class AddToToastAction { AddToToastActionItem? item; AddToToastAction({ this.item, }); factory AddToToastAction.fromJson(String str) => AddToToastAction.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory AddToToastAction.fromMap(Map json) => AddToToastAction( item: json["item"] == null ? null : AddToToastActionItem.fromMap(json["item"]), ); Map toMap() => { "item": item?.toMap(), }; } class AddToToastActionItem { NotificationTextRenderer? notificationTextRenderer; AddToToastActionItem({ this.notificationTextRenderer, }); factory AddToToastActionItem.fromJson(String str) => AddToToastActionItem.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory AddToToastActionItem.fromMap(Map json) => AddToToastActionItem( notificationTextRenderer: json["notificationTextRenderer"] == null ? null : NotificationTextRenderer.fromMap(json["notificationTextRenderer"]), ); Map toMap() => { "notificationTextRenderer": notificationTextRenderer?.toMap(), }; } class NotificationTextRenderer { PrimaryText? successResponseText; String? trackingParams; NotificationTextRenderer({ this.successResponseText, this.trackingParams, }); factory NotificationTextRenderer.fromJson(String str) => NotificationTextRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory NotificationTextRenderer.fromMap(Map json) => NotificationTextRenderer( successResponseText: json["successResponseText"] == null ? null : PrimaryText.fromMap(json["successResponseText"]), trackingParams: json["trackingParams"], ); Map toMap() => { "successResponseText": successResponseText?.toMap(), "trackingParams": trackingParams, }; } class QueueTarget { String? videoId; OnEmptyQueue? onEmptyQueue; String? playlistId; QueueTarget({ this.videoId, this.onEmptyQueue, this.playlistId, }); factory QueueTarget.fromJson(String str) => QueueTarget.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory QueueTarget.fromMap(Map json) => QueueTarget( videoId: json["videoId"], onEmptyQueue: json["onEmptyQueue"] == null ? null : OnEmptyQueue.fromMap(json["onEmptyQueue"]), playlistId: json["playlistId"], ); Map toMap() => { "videoId": videoId, "onEmptyQueue": onEmptyQueue?.toMap(), "playlistId": playlistId, }; } class OnEmptyQueue { String? clickTrackingParams; OnEmptyQueueWatchEndpoint? watchEndpoint; OnEmptyQueue({ this.clickTrackingParams, this.watchEndpoint, }); factory OnEmptyQueue.fromJson(String str) => OnEmptyQueue.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory OnEmptyQueue.fromMap(Map json) => OnEmptyQueue( clickTrackingParams: json["clickTrackingParams"], watchEndpoint: json["watchEndpoint"] == null ? null : OnEmptyQueueWatchEndpoint.fromMap(json["watchEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchEndpoint": watchEndpoint?.toMap(), }; } class OnEmptyQueueWatchEndpoint { String? videoId; String? playlistId; OnEmptyQueueWatchEndpoint({ this.videoId, this.playlistId, }); factory OnEmptyQueueWatchEndpoint.fromJson(String str) => OnEmptyQueueWatchEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory OnEmptyQueueWatchEndpoint.fromMap(Map json) => OnEmptyQueueWatchEndpoint( videoId: json["videoId"], playlistId: json["playlistId"], ); Map toMap() => { "videoId": videoId, "playlistId": playlistId, }; } class PurpleToggleMenuServiceItemRenderer { PrimaryText? defaultText; Icon? defaultIcon; DefaultServiceEndpointClass? defaultServiceEndpoint; PrimaryText? toggledText; Icon? toggledIcon; PurpleToggledServiceEndpoint? toggledServiceEndpoint; String? trackingParams; PurpleToggleMenuServiceItemRenderer({ this.defaultText, this.defaultIcon, this.defaultServiceEndpoint, this.toggledText, this.toggledIcon, this.toggledServiceEndpoint, this.trackingParams, }); factory PurpleToggleMenuServiceItemRenderer.fromJson(String str) => PurpleToggleMenuServiceItemRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleToggleMenuServiceItemRenderer.fromMap(Map json) => PurpleToggleMenuServiceItemRenderer( defaultText: json["defaultText"] == null ? null : PrimaryText.fromMap(json["defaultText"]), defaultIcon: json["defaultIcon"] == null ? null : Icon.fromMap(json["defaultIcon"]), defaultServiceEndpoint: json["defaultServiceEndpoint"] == null ? null : DefaultServiceEndpointClass.fromMap(json["defaultServiceEndpoint"]), toggledText: json["toggledText"] == null ? null : PrimaryText.fromMap(json["toggledText"]), toggledIcon: json["toggledIcon"] == null ? null : Icon.fromMap(json["toggledIcon"]), toggledServiceEndpoint: json["toggledServiceEndpoint"] == null ? null : PurpleToggledServiceEndpoint.fromMap(json["toggledServiceEndpoint"]), trackingParams: json["trackingParams"], ); Map toMap() => { "defaultText": defaultText?.toMap(), "defaultIcon": defaultIcon?.toMap(), "defaultServiceEndpoint": defaultServiceEndpoint?.toMap(), "toggledText": toggledText?.toMap(), "toggledIcon": toggledIcon?.toMap(), "toggledServiceEndpoint": toggledServiceEndpoint?.toMap(), "trackingParams": trackingParams, }; } class DefaultServiceEndpointClass { String? clickTrackingParams; ModalEndpoint? modalEndpoint; DefaultServiceEndpointClass({ this.clickTrackingParams, this.modalEndpoint, }); factory DefaultServiceEndpointClass.fromJson(String str) => DefaultServiceEndpointClass.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory DefaultServiceEndpointClass.fromMap(Map json) => DefaultServiceEndpointClass( clickTrackingParams: json["clickTrackingParams"], modalEndpoint: json["modalEndpoint"] == null ? null : ModalEndpoint.fromMap(json["modalEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "modalEndpoint": modalEndpoint?.toMap(), }; } class PurpleToggledServiceEndpoint { String? clickTrackingParams; FeedbackEndpoint? feedbackEndpoint; PurpleToggledServiceEndpoint({ this.clickTrackingParams, this.feedbackEndpoint, }); factory PurpleToggledServiceEndpoint.fromJson(String str) => PurpleToggledServiceEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleToggledServiceEndpoint.fromMap(Map json) => PurpleToggledServiceEndpoint( clickTrackingParams: json["clickTrackingParams"], feedbackEndpoint: json["feedbackEndpoint"] == null ? null : FeedbackEndpoint.fromMap(json["feedbackEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "feedbackEndpoint": feedbackEndpoint?.toMap(), }; } class FeedbackEndpoint { String? feedbackToken; FeedbackEndpoint({ this.feedbackToken, }); factory FeedbackEndpoint.fromJson(String str) => FeedbackEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FeedbackEndpoint.fromMap(Map json) => FeedbackEndpoint( feedbackToken: json["feedbackToken"], ); Map toMap() => { "feedbackToken": feedbackToken, }; } class TopLevelButton { LikeButtonRenderer? likeButtonRenderer; TopLevelButton({ this.likeButtonRenderer, }); factory TopLevelButton.fromJson(String str) => TopLevelButton.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory TopLevelButton.fromMap(Map json) => TopLevelButton( likeButtonRenderer: json["likeButtonRenderer"] == null ? null : LikeButtonRenderer.fromMap(json["likeButtonRenderer"]), ); Map toMap() => { "likeButtonRenderer": likeButtonRenderer?.toMap(), }; } class LikeButtonRenderer { PlaylistItemData? target; String? likeStatus; String? trackingParams; bool? likesAllowed; DefaultServiceEndpointClass? dislikeNavigationEndpoint; DefaultServiceEndpointClass? likeCommand; LikeButtonRenderer({ this.target, this.likeStatus, this.trackingParams, this.likesAllowed, this.dislikeNavigationEndpoint, this.likeCommand, }); factory LikeButtonRenderer.fromJson(String str) => LikeButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory LikeButtonRenderer.fromMap(Map json) => LikeButtonRenderer( target: json["target"] == null ? null : PlaylistItemData.fromMap(json["target"]), likeStatus: json["likeStatus"], trackingParams: json["trackingParams"], likesAllowed: json["likesAllowed"], dislikeNavigationEndpoint: json["dislikeNavigationEndpoint"] == null ? null : DefaultServiceEndpointClass.fromMap(json["dislikeNavigationEndpoint"]), likeCommand: json["likeCommand"] == null ? null : DefaultServiceEndpointClass.fromMap(json["likeCommand"]), ); Map toMap() => { "target": target?.toMap(), "likeStatus": likeStatus, "trackingParams": trackingParams, "likesAllowed": likesAllowed, "dislikeNavigationEndpoint": dislikeNavigationEndpoint?.toMap(), "likeCommand": likeCommand?.toMap(), }; } class PlaylistItemData { String? videoId; PlaylistItemData({ this.videoId, }); factory PlaylistItemData.fromJson(String str) => PlaylistItemData.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PlaylistItemData.fromMap(Map json) => PlaylistItemData( videoId: json["videoId"], ); Map toMap() => { "videoId": videoId, }; } class Overlay { OverlayMusicItemThumbnailOverlayRenderer? musicItemThumbnailOverlayRenderer; Overlay({ this.musicItemThumbnailOverlayRenderer, }); factory Overlay.fromJson(String str) => Overlay.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Overlay.fromMap(Map json) => Overlay( musicItemThumbnailOverlayRenderer: json["musicItemThumbnailOverlayRenderer"] == null ? null : OverlayMusicItemThumbnailOverlayRenderer.fromMap(json["musicItemThumbnailOverlayRenderer"]), ); Map toMap() => { "musicItemThumbnailOverlayRenderer": musicItemThumbnailOverlayRenderer?.toMap(), }; } class OverlayMusicItemThumbnailOverlayRenderer { MusicItemThumbnailOverlayRendererBackground? background; PurpleContent? content; String? contentPosition; String? displayStyle; OverlayMusicItemThumbnailOverlayRenderer({ this.background, this.content, this.contentPosition, this.displayStyle, }); factory OverlayMusicItemThumbnailOverlayRenderer.fromJson(String str) => OverlayMusicItemThumbnailOverlayRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory OverlayMusicItemThumbnailOverlayRenderer.fromMap(Map json) => OverlayMusicItemThumbnailOverlayRenderer( background: json["background"] == null ? null : MusicItemThumbnailOverlayRendererBackground.fromMap(json["background"]), content: json["content"] == null ? null : PurpleContent.fromMap(json["content"]), contentPosition: json["contentPosition"], displayStyle: json["displayStyle"], ); Map toMap() => { "background": background?.toMap(), "content": content?.toMap(), "contentPosition": contentPosition, "displayStyle": displayStyle, }; } class MusicItemThumbnailOverlayRendererBackground { VerticalGradient? verticalGradient; MusicItemThumbnailOverlayRendererBackground({ this.verticalGradient, }); factory MusicItemThumbnailOverlayRendererBackground.fromJson(String str) => MusicItemThumbnailOverlayRendererBackground.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicItemThumbnailOverlayRendererBackground.fromMap(Map json) => MusicItemThumbnailOverlayRendererBackground( verticalGradient: json["verticalGradient"] == null ? null : VerticalGradient.fromMap(json["verticalGradient"]), ); Map toMap() => { "verticalGradient": verticalGradient?.toMap(), }; } class VerticalGradient { List? gradientLayerColors; VerticalGradient({ this.gradientLayerColors, }); factory VerticalGradient.fromJson(String str) => VerticalGradient.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory VerticalGradient.fromMap(Map json) => VerticalGradient( gradientLayerColors: json["gradientLayerColors"] == null ? [] : List.from(json["gradientLayerColors"]!.map((x) => x)), ); Map toMap() => { "gradientLayerColors": gradientLayerColors == null ? [] : List.from(gradientLayerColors!.map((x) => x)), }; } class PurpleContent { PurpleMusicPlayButtonRenderer? musicPlayButtonRenderer; MusicShelfRenderer? musicShelfRenderer; MusicPlaylistShelfRenderer? musicPlaylistShelfRenderer; PurpleContent({ this.musicPlayButtonRenderer, this.musicShelfRenderer, this.musicPlaylistShelfRenderer, }); factory PurpleContent.fromJson(String str) => PurpleContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleContent.fromMap(Map json) => PurpleContent( musicPlayButtonRenderer: json["musicPlayButtonRenderer"] == null ? null : PurpleMusicPlayButtonRenderer.fromMap(json["musicPlayButtonRenderer"]), musicShelfRenderer: json["musicShelfRenderer"] == null ? null : MusicShelfRenderer.fromMap(json["musicShelfRenderer"]), musicPlaylistShelfRenderer: json["musicPlaylistShelfRenderer"] == null ? null : MusicPlaylistShelfRenderer.fromMap(json["musicPlaylistShelfRenderer"]), ); Map toMap() => { "musicPlayButtonRenderer": musicPlayButtonRenderer?.toMap(), "musicShelfRenderer": musicShelfRenderer?.toMap(), "musicPlaylistShelfRenderer": musicPlaylistShelfRenderer?.toMap(), }; } class PurpleMusicPlayButtonRenderer { PurplePlayNavigationEndpoint? playNavigationEndpoint; String? trackingParams; Icon? playIcon; Icon? pauseIcon; int? iconColor; int? backgroundColor; int? activeBackgroundColor; int? loadingIndicatorColor; Icon? playingIcon; int? iconLoadingColor; int? activeScaleFactor; String? buttonSize; String? rippleTarget; Accessibility? accessibilityPlayData; Accessibility? accessibilityPauseData; PurpleMusicPlayButtonRenderer({ this.playNavigationEndpoint, this.trackingParams, this.playIcon, this.pauseIcon, this.iconColor, this.backgroundColor, this.activeBackgroundColor, this.loadingIndicatorColor, this.playingIcon, this.iconLoadingColor, this.activeScaleFactor, this.buttonSize, this.rippleTarget, this.accessibilityPlayData, this.accessibilityPauseData, }); factory PurpleMusicPlayButtonRenderer.fromJson(String str) => PurpleMusicPlayButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurpleMusicPlayButtonRenderer.fromMap(Map json) => PurpleMusicPlayButtonRenderer( playNavigationEndpoint: json["playNavigationEndpoint"] == null ? null : PurplePlayNavigationEndpoint.fromMap(json["playNavigationEndpoint"]), trackingParams: json["trackingParams"], playIcon: json["playIcon"] == null ? null : Icon.fromMap(json["playIcon"]), pauseIcon: json["pauseIcon"] == null ? null : Icon.fromMap(json["pauseIcon"]), iconColor: json["iconColor"], backgroundColor: json["backgroundColor"], activeBackgroundColor: json["activeBackgroundColor"], loadingIndicatorColor: json["loadingIndicatorColor"], playingIcon: json["playingIcon"] == null ? null : Icon.fromMap(json["playingIcon"]), iconLoadingColor: json["iconLoadingColor"], activeScaleFactor: json["activeScaleFactor"], buttonSize: json["buttonSize"], rippleTarget: json["rippleTarget"], accessibilityPlayData: json["accessibilityPlayData"] == null ? null : Accessibility.fromMap(json["accessibilityPlayData"]), accessibilityPauseData: json["accessibilityPauseData"] == null ? null : Accessibility.fromMap(json["accessibilityPauseData"]), ); Map toMap() => { "playNavigationEndpoint": playNavigationEndpoint?.toMap(), "trackingParams": trackingParams, "playIcon": playIcon?.toMap(), "pauseIcon": pauseIcon?.toMap(), "iconColor": iconColor, "backgroundColor": backgroundColor, "activeBackgroundColor": activeBackgroundColor, "loadingIndicatorColor": loadingIndicatorColor, "playingIcon": playingIcon?.toMap(), "iconLoadingColor": iconLoadingColor, "activeScaleFactor": activeScaleFactor, "buttonSize": buttonSize, "rippleTarget": rippleTarget, "accessibilityPlayData": accessibilityPlayData?.toMap(), "accessibilityPauseData": accessibilityPauseData?.toMap(), }; } class PurplePlayNavigationEndpoint { String? clickTrackingParams; NavigationEndpointWatchEndpoint? watchEndpoint; PurplePlayNavigationEndpoint({ this.clickTrackingParams, this.watchEndpoint, }); factory PurplePlayNavigationEndpoint.fromJson(String str) => PurplePlayNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PurplePlayNavigationEndpoint.fromMap(Map json) => PurplePlayNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], watchEndpoint: json["watchEndpoint"] == null ? null : NavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchEndpoint": watchEndpoint?.toMap(), }; } class MusicTwoRowItemRenderer { ThumbnailClass? thumbnailRenderer; String? aspectRatio; Title? title; Subtitle? subtitle; MusicTwoRowItemRendererNavigationEndpoint? navigationEndpoint; String? trackingParams; MusicTwoRowItemRendererMenu? menu; ThumbnailOverlay? thumbnailOverlay; MusicTwoRowItemRenderer({ this.thumbnailRenderer, this.aspectRatio, this.title, this.subtitle, this.navigationEndpoint, this.trackingParams, this.menu, this.thumbnailOverlay, }); factory MusicTwoRowItemRenderer.fromJson(String str) => MusicTwoRowItemRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicTwoRowItemRenderer.fromMap(Map json) => MusicTwoRowItemRenderer( thumbnailRenderer: json["thumbnailRenderer"] == null ? null : ThumbnailClass.fromMap(json["thumbnailRenderer"]), aspectRatio: json["aspectRatio"], title: json["title"] == null ? null : Title.fromMap(json["title"]), subtitle: json["subtitle"] == null ? null : Subtitle.fromMap(json["subtitle"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : MusicTwoRowItemRendererNavigationEndpoint.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], menu: json["menu"] == null ? null : MusicTwoRowItemRendererMenu.fromMap(json["menu"]), thumbnailOverlay: json["thumbnailOverlay"] == null ? null : ThumbnailOverlay.fromMap(json["thumbnailOverlay"]), ); Map toMap() => { "thumbnailRenderer": thumbnailRenderer?.toMap(), "aspectRatio": aspectRatio, "title": title?.toMap(), "subtitle": subtitle?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, "menu": menu?.toMap(), "thumbnailOverlay": thumbnailOverlay?.toMap(), }; } class MusicTwoRowItemRendererMenu { FluffyMenuRenderer? menuRenderer; MusicTwoRowItemRendererMenu({ this.menuRenderer, }); factory MusicTwoRowItemRendererMenu.fromJson(String str) => MusicTwoRowItemRendererMenu.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicTwoRowItemRendererMenu.fromMap(Map json) => MusicTwoRowItemRendererMenu( menuRenderer: json["menuRenderer"] == null ? null : FluffyMenuRenderer.fromMap(json["menuRenderer"]), ); Map toMap() => { "menuRenderer": menuRenderer?.toMap(), }; } class FluffyMenuRenderer { List? items; String? trackingParams; Accessibility? accessibility; FluffyMenuRenderer({ this.items, this.trackingParams, this.accessibility, }); factory FluffyMenuRenderer.fromJson(String str) => FluffyMenuRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyMenuRenderer.fromMap(Map json) => FluffyMenuRenderer( items: json["items"] == null ? [] : List.from(json["items"]!.map((x) => FluffyItem.fromMap(x))), trackingParams: json["trackingParams"], accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]), ); Map toMap() => { "items": items == null ? [] : List.from(items!.map((x) => x.toMap())), "trackingParams": trackingParams, "accessibility": accessibility?.toMap(), }; } class FluffyItem { MenuItemRenderer? menuNavigationItemRenderer; MenuItemRenderer? menuServiceItemRenderer; FluffyToggleMenuServiceItemRenderer? toggleMenuServiceItemRenderer; FluffyItem({ this.menuNavigationItemRenderer, this.menuServiceItemRenderer, this.toggleMenuServiceItemRenderer, }); factory FluffyItem.fromJson(String str) => FluffyItem.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyItem.fromMap(Map json) => FluffyItem( menuNavigationItemRenderer: json["menuNavigationItemRenderer"] == null ? null : MenuItemRenderer.fromMap(json["menuNavigationItemRenderer"]), menuServiceItemRenderer: json["menuServiceItemRenderer"] == null ? null : MenuItemRenderer.fromMap(json["menuServiceItemRenderer"]), toggleMenuServiceItemRenderer: json["toggleMenuServiceItemRenderer"] == null ? null : FluffyToggleMenuServiceItemRenderer.fromMap(json["toggleMenuServiceItemRenderer"]), ); Map toMap() => { "menuNavigationItemRenderer": menuNavigationItemRenderer?.toMap(), "menuServiceItemRenderer": menuServiceItemRenderer?.toMap(), "toggleMenuServiceItemRenderer": toggleMenuServiceItemRenderer?.toMap(), }; } class FluffyToggleMenuServiceItemRenderer { PrimaryText? defaultText; Icon? defaultIcon; DefaultServiceEndpointClass? defaultServiceEndpoint; PrimaryText? toggledText; Icon? toggledIcon; FluffyToggledServiceEndpoint? toggledServiceEndpoint; String? trackingParams; FluffyToggleMenuServiceItemRenderer({ this.defaultText, this.defaultIcon, this.defaultServiceEndpoint, this.toggledText, this.toggledIcon, this.toggledServiceEndpoint, this.trackingParams, }); factory FluffyToggleMenuServiceItemRenderer.fromJson(String str) => FluffyToggleMenuServiceItemRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyToggleMenuServiceItemRenderer.fromMap(Map json) => FluffyToggleMenuServiceItemRenderer( defaultText: json["defaultText"] == null ? null : PrimaryText.fromMap(json["defaultText"]), defaultIcon: json["defaultIcon"] == null ? null : Icon.fromMap(json["defaultIcon"]), defaultServiceEndpoint: json["defaultServiceEndpoint"] == null ? null : DefaultServiceEndpointClass.fromMap(json["defaultServiceEndpoint"]), toggledText: json["toggledText"] == null ? null : PrimaryText.fromMap(json["toggledText"]), toggledIcon: json["toggledIcon"] == null ? null : Icon.fromMap(json["toggledIcon"]), toggledServiceEndpoint: json["toggledServiceEndpoint"] == null ? null : FluffyToggledServiceEndpoint.fromMap(json["toggledServiceEndpoint"]), trackingParams: json["trackingParams"], ); Map toMap() => { "defaultText": defaultText?.toMap(), "defaultIcon": defaultIcon?.toMap(), "defaultServiceEndpoint": defaultServiceEndpoint?.toMap(), "toggledText": toggledText?.toMap(), "toggledIcon": toggledIcon?.toMap(), "toggledServiceEndpoint": toggledServiceEndpoint?.toMap(), "trackingParams": trackingParams, }; } class FluffyToggledServiceEndpoint { String? clickTrackingParams; LikeEndpoint? likeEndpoint; FluffyToggledServiceEndpoint({ this.clickTrackingParams, this.likeEndpoint, }); factory FluffyToggledServiceEndpoint.fromJson(String str) => FluffyToggledServiceEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyToggledServiceEndpoint.fromMap(Map json) => FluffyToggledServiceEndpoint( clickTrackingParams: json["clickTrackingParams"], likeEndpoint: json["likeEndpoint"] == null ? null : LikeEndpoint.fromMap(json["likeEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "likeEndpoint": likeEndpoint?.toMap(), }; } class LikeEndpoint { String? status; TargetClass? target; LikeEndpoint({ this.status, this.target, }); factory LikeEndpoint.fromJson(String str) => LikeEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory LikeEndpoint.fromMap(Map json) => LikeEndpoint( status: json["status"], target: json["target"] == null ? null : TargetClass.fromMap(json["target"]), ); Map toMap() => { "status": status, "target": target?.toMap(), }; } class TargetClass { String? playlistId; TargetClass({ this.playlistId, }); factory TargetClass.fromJson(String str) => TargetClass.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory TargetClass.fromMap(Map json) => TargetClass( playlistId: json["playlistId"], ); Map toMap() => { "playlistId": playlistId, }; } class MusicTwoRowItemRendererNavigationEndpoint { String? clickTrackingParams; FluffyBrowseEndpoint? browseEndpoint; MusicTwoRowItemRendererNavigationEndpoint({ this.clickTrackingParams, this.browseEndpoint, }); factory MusicTwoRowItemRendererNavigationEndpoint.fromJson(String str) => MusicTwoRowItemRendererNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicTwoRowItemRendererNavigationEndpoint.fromMap(Map json) => MusicTwoRowItemRendererNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], browseEndpoint: json["browseEndpoint"] == null ? null : FluffyBrowseEndpoint.fromMap(json["browseEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "browseEndpoint": browseEndpoint?.toMap(), }; } class FluffyBrowseEndpoint { String? browseId; String? params; BrowseEndpointContextSupportedConfigs? browseEndpointContextSupportedConfigs; FluffyBrowseEndpoint({ this.browseId, this.params, this.browseEndpointContextSupportedConfigs, }); factory FluffyBrowseEndpoint.fromJson(String str) => FluffyBrowseEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyBrowseEndpoint.fromMap(Map json) => FluffyBrowseEndpoint( browseId: json["browseId"], params: json["params"], browseEndpointContextSupportedConfigs: json["browseEndpointContextSupportedConfigs"] == null ? null : BrowseEndpointContextSupportedConfigs.fromMap(json["browseEndpointContextSupportedConfigs"]), ); Map toMap() => { "browseId": browseId, "params": params, "browseEndpointContextSupportedConfigs": browseEndpointContextSupportedConfigs?.toMap(), }; } class Subtitle { List? runs; Subtitle({ this.runs, }); factory Subtitle.fromJson(String str) => Subtitle.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Subtitle.fromMap(Map json) => Subtitle( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => SubtitleRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class SubtitleRun { String? text; TentacledNavigationEndpoint? navigationEndpoint; SubtitleRun({ this.text, this.navigationEndpoint, }); factory SubtitleRun.fromJson(String str) => SubtitleRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SubtitleRun.fromMap(Map json) => SubtitleRun( text: json["text"], navigationEndpoint: json["navigationEndpoint"] == null ? null : TentacledNavigationEndpoint.fromMap(json["navigationEndpoint"]), ); Map toMap() => { "text": text, "navigationEndpoint": navigationEndpoint?.toMap(), }; } class TentacledNavigationEndpoint { String? clickTrackingParams; PurpleBrowseEndpoint? browseEndpoint; TentacledNavigationEndpoint({ this.clickTrackingParams, this.browseEndpoint, }); factory TentacledNavigationEndpoint.fromJson(String str) => TentacledNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory TentacledNavigationEndpoint.fromMap(Map json) => TentacledNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], browseEndpoint: json["browseEndpoint"] == null ? null : PurpleBrowseEndpoint.fromMap(json["browseEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "browseEndpoint": browseEndpoint?.toMap(), }; } class ThumbnailOverlay { ThumbnailOverlayMusicItemThumbnailOverlayRenderer? musicItemThumbnailOverlayRenderer; ThumbnailOverlay({ this.musicItemThumbnailOverlayRenderer, }); factory ThumbnailOverlay.fromJson(String str) => ThumbnailOverlay.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ThumbnailOverlay.fromMap(Map json) => ThumbnailOverlay( musicItemThumbnailOverlayRenderer: json["musicItemThumbnailOverlayRenderer"] == null ? null : ThumbnailOverlayMusicItemThumbnailOverlayRenderer.fromMap(json["musicItemThumbnailOverlayRenderer"]), ); Map toMap() => { "musicItemThumbnailOverlayRenderer": musicItemThumbnailOverlayRenderer?.toMap(), }; } class ThumbnailOverlayMusicItemThumbnailOverlayRenderer { MusicItemThumbnailOverlayRendererBackground? background; FluffyContent? content; String? contentPosition; String? displayStyle; ThumbnailOverlayMusicItemThumbnailOverlayRenderer({ this.background, this.content, this.contentPosition, this.displayStyle, }); factory ThumbnailOverlayMusicItemThumbnailOverlayRenderer.fromJson(String str) => ThumbnailOverlayMusicItemThumbnailOverlayRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ThumbnailOverlayMusicItemThumbnailOverlayRenderer.fromMap(Map json) => ThumbnailOverlayMusicItemThumbnailOverlayRenderer( background: json["background"] == null ? null : MusicItemThumbnailOverlayRendererBackground.fromMap(json["background"]), content: json["content"] == null ? null : FluffyContent.fromMap(json["content"]), contentPosition: json["contentPosition"], displayStyle: json["displayStyle"], ); Map toMap() => { "background": background?.toMap(), "content": content?.toMap(), "contentPosition": contentPosition, "displayStyle": displayStyle, }; } class FluffyContent { FluffyMusicPlayButtonRenderer? musicPlayButtonRenderer; FluffyContent({ this.musicPlayButtonRenderer, }); factory FluffyContent.fromJson(String str) => FluffyContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyContent.fromMap(Map json) => FluffyContent( musicPlayButtonRenderer: json["musicPlayButtonRenderer"] == null ? null : FluffyMusicPlayButtonRenderer.fromMap(json["musicPlayButtonRenderer"]), ); Map toMap() => { "musicPlayButtonRenderer": musicPlayButtonRenderer?.toMap(), }; } class FluffyMusicPlayButtonRenderer { FluffyPlayNavigationEndpoint? playNavigationEndpoint; String? trackingParams; Icon? playIcon; Icon? pauseIcon; int? iconColor; int? backgroundColor; int? activeBackgroundColor; int? loadingIndicatorColor; Icon? playingIcon; int? iconLoadingColor; double? activeScaleFactor; String? buttonSize; String? rippleTarget; Accessibility? accessibilityPlayData; Accessibility? accessibilityPauseData; FluffyMusicPlayButtonRenderer({ this.playNavigationEndpoint, this.trackingParams, this.playIcon, this.pauseIcon, this.iconColor, this.backgroundColor, this.activeBackgroundColor, this.loadingIndicatorColor, this.playingIcon, this.iconLoadingColor, this.activeScaleFactor, this.buttonSize, this.rippleTarget, this.accessibilityPlayData, this.accessibilityPauseData, }); factory FluffyMusicPlayButtonRenderer.fromJson(String str) => FluffyMusicPlayButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyMusicPlayButtonRenderer.fromMap(Map json) => FluffyMusicPlayButtonRenderer( playNavigationEndpoint: json["playNavigationEndpoint"] == null ? null : FluffyPlayNavigationEndpoint.fromMap(json["playNavigationEndpoint"]), trackingParams: json["trackingParams"], playIcon: json["playIcon"] == null ? null : Icon.fromMap(json["playIcon"]), pauseIcon: json["pauseIcon"] == null ? null : Icon.fromMap(json["pauseIcon"]), iconColor: json["iconColor"], backgroundColor: json["backgroundColor"], activeBackgroundColor: json["activeBackgroundColor"], loadingIndicatorColor: json["loadingIndicatorColor"], playingIcon: json["playingIcon"] == null ? null : Icon.fromMap(json["playingIcon"]), iconLoadingColor: json["iconLoadingColor"], activeScaleFactor: json["activeScaleFactor"]?.toDouble(), buttonSize: json["buttonSize"], rippleTarget: json["rippleTarget"], accessibilityPlayData: json["accessibilityPlayData"] == null ? null : Accessibility.fromMap(json["accessibilityPlayData"]), accessibilityPauseData: json["accessibilityPauseData"] == null ? null : Accessibility.fromMap(json["accessibilityPauseData"]), ); Map toMap() => { "playNavigationEndpoint": playNavigationEndpoint?.toMap(), "trackingParams": trackingParams, "playIcon": playIcon?.toMap(), "pauseIcon": pauseIcon?.toMap(), "iconColor": iconColor, "backgroundColor": backgroundColor, "activeBackgroundColor": activeBackgroundColor, "loadingIndicatorColor": loadingIndicatorColor, "playingIcon": playingIcon?.toMap(), "iconLoadingColor": iconLoadingColor, "activeScaleFactor": activeScaleFactor, "buttonSize": buttonSize, "rippleTarget": rippleTarget, "accessibilityPlayData": accessibilityPlayData?.toMap(), "accessibilityPauseData": accessibilityPauseData?.toMap(), }; } class FluffyPlayNavigationEndpoint { String? clickTrackingParams; TargetClass? watchPlaylistEndpoint; FluffyPlayNavigationEndpoint({ this.clickTrackingParams, this.watchPlaylistEndpoint, }); factory FluffyPlayNavigationEndpoint.fromJson(String str) => FluffyPlayNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyPlayNavigationEndpoint.fromMap(Map json) => FluffyPlayNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], watchPlaylistEndpoint: json["watchPlaylistEndpoint"] == null ? null : TargetClass.fromMap(json["watchPlaylistEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchPlaylistEndpoint": watchPlaylistEndpoint?.toMap(), }; } class Title { List? runs; Title({ this.runs, }); factory Title.fromJson(String str) => Title.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Title.fromMap(Map json) => Title( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => FluffyRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class FluffyRun { String? text; MusicTwoRowItemRendererNavigationEndpoint? navigationEndpoint; FluffyRun({ this.text, this.navigationEndpoint, }); factory FluffyRun.fromJson(String str) => FluffyRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FluffyRun.fromMap(Map json) => FluffyRun( text: json["text"], navigationEndpoint: json["navigationEndpoint"] == null ? null : MusicTwoRowItemRendererNavigationEndpoint.fromMap(json["navigationEndpoint"]), ); Map toMap() => { "text": text, "navigationEndpoint": navigationEndpoint?.toMap(), }; } class MusicCarouselShelfRendererHeader { MusicCarouselShelfBasicHeaderRenderer? musicCarouselShelfBasicHeaderRenderer; MusicCarouselShelfRendererHeader({ this.musicCarouselShelfBasicHeaderRenderer, }); factory MusicCarouselShelfRendererHeader.fromJson(String str) => MusicCarouselShelfRendererHeader.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicCarouselShelfRendererHeader.fromMap(Map json) => MusicCarouselShelfRendererHeader( musicCarouselShelfBasicHeaderRenderer: json["musicCarouselShelfBasicHeaderRenderer"] == null ? null : MusicCarouselShelfBasicHeaderRenderer.fromMap(json["musicCarouselShelfBasicHeaderRenderer"]), ); Map toMap() => { "musicCarouselShelfBasicHeaderRenderer": musicCarouselShelfBasicHeaderRenderer?.toMap(), }; } class MusicCarouselShelfBasicHeaderRenderer { PrimaryText? title; PrimaryText? strapline; Accessibility? accessibilityData; String? headerStyle; MoreContentButton? moreContentButton; String? trackingParams; MusicCarouselShelfBasicHeaderRenderer({ this.title, this.strapline, this.accessibilityData, this.headerStyle, this.moreContentButton, this.trackingParams, }); factory MusicCarouselShelfBasicHeaderRenderer.fromJson(String str) => MusicCarouselShelfBasicHeaderRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicCarouselShelfBasicHeaderRenderer.fromMap(Map json) => MusicCarouselShelfBasicHeaderRenderer( title: json["title"] == null ? null : PrimaryText.fromMap(json["title"]), strapline: json["strapline"] == null ? null : PrimaryText.fromMap(json["strapline"]), accessibilityData: json["accessibilityData"] == null ? null : Accessibility.fromMap(json["accessibilityData"]), headerStyle: json["headerStyle"], moreContentButton: json["moreContentButton"] == null ? null : MoreContentButton.fromMap(json["moreContentButton"]), trackingParams: json["trackingParams"], ); Map toMap() => { "title": title?.toMap(), "strapline": strapline?.toMap(), "accessibilityData": accessibilityData?.toMap(), "headerStyle": headerStyle, "moreContentButton": moreContentButton?.toMap(), "trackingParams": trackingParams, }; } class MoreContentButton { MoreContentButtonButtonRenderer? buttonRenderer; MoreContentButton({ this.buttonRenderer, }); factory MoreContentButton.fromJson(String str) => MoreContentButton.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MoreContentButton.fromMap(Map json) => MoreContentButton( buttonRenderer: json["buttonRenderer"] == null ? null : MoreContentButtonButtonRenderer.fromMap(json["buttonRenderer"]), ); Map toMap() => { "buttonRenderer": buttonRenderer?.toMap(), }; } class MoreContentButtonButtonRenderer { String? style; PrimaryText? text; StickyNavigationEndpoint? navigationEndpoint; String? trackingParams; Accessibility? accessibilityData; MoreContentButtonButtonRenderer({ this.style, this.text, this.navigationEndpoint, this.trackingParams, this.accessibilityData, }); factory MoreContentButtonButtonRenderer.fromJson(String str) => MoreContentButtonButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MoreContentButtonButtonRenderer.fromMap(Map json) => MoreContentButtonButtonRenderer( style: json["style"], text: json["text"] == null ? null : PrimaryText.fromMap(json["text"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : StickyNavigationEndpoint.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], accessibilityData: json["accessibilityData"] == null ? null : Accessibility.fromMap(json["accessibilityData"]), ); Map toMap() => { "style": style, "text": text?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, "accessibilityData": accessibilityData?.toMap(), }; } class StickyNavigationEndpoint { String? clickTrackingParams; WatchPlaylistEndpoint? watchPlaylistEndpoint; StickyNavigationEndpoint({ this.clickTrackingParams, this.watchPlaylistEndpoint, }); factory StickyNavigationEndpoint.fromJson(String str) => StickyNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory StickyNavigationEndpoint.fromMap(Map json) => StickyNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], watchPlaylistEndpoint: json["watchPlaylistEndpoint"] == null ? null : WatchPlaylistEndpoint.fromMap(json["watchPlaylistEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchPlaylistEndpoint": watchPlaylistEndpoint?.toMap(), }; } class MusicTastebuilderShelfRenderer { MusicTastebuilderShelfRendererThumbnail? thumbnail; PrimaryText? primaryText; PrimaryText? secondaryText; ActionButton? actionButton; bool? isVisible; String? trackingParams; MusicTastebuilderShelfRenderer({ this.thumbnail, this.primaryText, this.secondaryText, this.actionButton, this.isVisible, this.trackingParams, }); factory MusicTastebuilderShelfRenderer.fromJson(String str) => MusicTastebuilderShelfRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicTastebuilderShelfRenderer.fromMap(Map json) => MusicTastebuilderShelfRenderer( thumbnail: json["thumbnail"] == null ? null : MusicTastebuilderShelfRendererThumbnail.fromMap(json["thumbnail"]), primaryText: json["primaryText"] == null ? null : PrimaryText.fromMap(json["primaryText"]), secondaryText: json["secondaryText"] == null ? null : PrimaryText.fromMap(json["secondaryText"]), actionButton: json["actionButton"] == null ? null : ActionButton.fromMap(json["actionButton"]), isVisible: json["isVisible"], trackingParams: json["trackingParams"], ); Map toMap() => { "thumbnail": thumbnail?.toMap(), "primaryText": primaryText?.toMap(), "secondaryText": secondaryText?.toMap(), "actionButton": actionButton?.toMap(), "isVisible": isVisible, "trackingParams": trackingParams, }; } class ActionButton { ActionButtonButtonRenderer? buttonRenderer; ActionButton({ this.buttonRenderer, }); factory ActionButton.fromJson(String str) => ActionButton.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ActionButton.fromMap(Map json) => ActionButton( buttonRenderer: json["buttonRenderer"] == null ? null : ActionButtonButtonRenderer.fromMap(json["buttonRenderer"]), ); Map toMap() => { "buttonRenderer": buttonRenderer?.toMap(), }; } class ActionButtonButtonRenderer { String? style; PrimaryText? text; DefaultServiceEndpointClass? navigationEndpoint; String? trackingParams; ActionButtonButtonRenderer({ this.style, this.text, this.navigationEndpoint, this.trackingParams, }); factory ActionButtonButtonRenderer.fromJson(String str) => ActionButtonButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ActionButtonButtonRenderer.fromMap(Map json) => ActionButtonButtonRenderer( style: json["style"], text: json["text"] == null ? null : PrimaryText.fromMap(json["text"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : DefaultServiceEndpointClass.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], ); Map toMap() => { "style": style, "text": text?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, }; } class MusicTastebuilderShelfRendererThumbnail { MusicTastebuilderShelfThumbnailRenderer? musicTastebuilderShelfThumbnailRenderer; MusicTastebuilderShelfRendererThumbnail({ this.musicTastebuilderShelfThumbnailRenderer, }); factory MusicTastebuilderShelfRendererThumbnail.fromJson(String str) => MusicTastebuilderShelfRendererThumbnail.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicTastebuilderShelfRendererThumbnail.fromMap(Map json) => MusicTastebuilderShelfRendererThumbnail( musicTastebuilderShelfThumbnailRenderer: json["musicTastebuilderShelfThumbnailRenderer"] == null ? null : MusicTastebuilderShelfThumbnailRenderer.fromMap(json["musicTastebuilderShelfThumbnailRenderer"]), ); Map toMap() => { "musicTastebuilderShelfThumbnailRenderer": musicTastebuilderShelfThumbnailRenderer?.toMap(), }; } class MusicTastebuilderShelfThumbnailRenderer { MusicThumbnailRendererThumbnail? thumbnail; MusicTastebuilderShelfThumbnailRenderer({ this.thumbnail, }); factory MusicTastebuilderShelfThumbnailRenderer.fromJson(String str) => MusicTastebuilderShelfThumbnailRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicTastebuilderShelfThumbnailRenderer.fromMap(Map json) => MusicTastebuilderShelfThumbnailRenderer( thumbnail: json["thumbnail"] == null ? null : MusicThumbnailRendererThumbnail.fromMap(json["thumbnail"]), ); Map toMap() => { "thumbnail": thumbnail?.toMap(), }; } class Continuation { NextContinuationData? nextContinuationData; Continuation({ this.nextContinuationData, }); factory Continuation.fromJson(String str) => Continuation.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Continuation.fromMap(Map json) => Continuation( nextContinuationData: json["nextContinuationData"] == null ? null : NextContinuationData.fromMap(json["nextContinuationData"]), ); Map toMap() => { "nextContinuationData": nextContinuationData?.toMap(), }; } class NextContinuationData { String? continuation; String? clickTrackingParams; NextContinuationData({ this.continuation, this.clickTrackingParams, }); factory NextContinuationData.fromJson(String str) => NextContinuationData.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory NextContinuationData.fromMap(Map json) => NextContinuationData( continuation: json["continuation"], clickTrackingParams: json["clickTrackingParams"], ); Map toMap() => { "continuation": continuation, "clickTrackingParams": clickTrackingParams, }; } class SectionListContinuationHeader { ChipCloudRenderer? chipCloudRenderer; SectionListContinuationHeader({ this.chipCloudRenderer, }); factory SectionListContinuationHeader.fromJson(String str) => SectionListContinuationHeader.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SectionListContinuationHeader.fromMap(Map json) => SectionListContinuationHeader( chipCloudRenderer: json["chipCloudRenderer"] == null ? null : ChipCloudRenderer.fromMap(json["chipCloudRenderer"]), ); Map toMap() => { "chipCloudRenderer": chipCloudRenderer?.toMap(), }; } class ChipCloudRenderer { List? chips; String? trackingParams; bool? horizontalScrollable; ChipCloudRenderer({ this.chips, this.trackingParams, this.horizontalScrollable, }); factory ChipCloudRenderer.fromJson(String str) => ChipCloudRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ChipCloudRenderer.fromMap(Map json) => ChipCloudRenderer( chips: json["chips"] == null ? [] : List.from(json["chips"]!.map((x) => Chip.fromMap(x))), trackingParams: json["trackingParams"], horizontalScrollable: json["horizontalScrollable"], ); Map toMap() => { "chips": chips == null ? [] : List.from(chips!.map((x) => x.toMap())), "trackingParams": trackingParams, "horizontalScrollable": horizontalScrollable, }; } class Chip { ChipCloudChipRenderer? chipCloudChipRenderer; Chip({ this.chipCloudChipRenderer, }); factory Chip.fromJson(String str) => Chip.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Chip.fromMap(Map json) => Chip( chipCloudChipRenderer: json["chipCloudChipRenderer"] == null ? null : ChipCloudChipRenderer.fromMap(json["chipCloudChipRenderer"]), ); Map toMap() => { "chipCloudChipRenderer": chipCloudChipRenderer?.toMap(), }; } class ChipCloudChipRenderer { Style? style; PrimaryText? text; OnDeselectedCommandClass? navigationEndpoint; String? trackingParams; bool? isSelected; OnDeselectedCommandClass? onDeselectedCommand; ChipCloudChipRenderer({ this.style, this.text, this.navigationEndpoint, this.trackingParams, this.isSelected, this.onDeselectedCommand, }); factory ChipCloudChipRenderer.fromJson(String str) => ChipCloudChipRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ChipCloudChipRenderer.fromMap(Map json) => ChipCloudChipRenderer( style: json["style"] == null ? null : Style.fromMap(json["style"]), text: json["text"] == null ? null : PrimaryText.fromMap(json["text"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : OnDeselectedCommandClass.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], isSelected: json["isSelected"], onDeselectedCommand: json["onDeselectedCommand"] == null ? null : OnDeselectedCommandClass.fromMap(json["onDeselectedCommand"]), ); Map toMap() => { "style": style?.toMap(), "text": text?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, "isSelected": isSelected, "onDeselectedCommand": onDeselectedCommand?.toMap(), }; } class OnDeselectedCommandClass { String? clickTrackingParams; OnDeselectedCommandBrowseEndpoint? browseEndpoint; OnDeselectedCommandClass({ this.clickTrackingParams, this.browseEndpoint, }); factory OnDeselectedCommandClass.fromJson(String str) => OnDeselectedCommandClass.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory OnDeselectedCommandClass.fromMap(Map json) => OnDeselectedCommandClass( clickTrackingParams: json["clickTrackingParams"], browseEndpoint: json["browseEndpoint"] == null ? null : OnDeselectedCommandBrowseEndpoint.fromMap(json["browseEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "browseEndpoint": browseEndpoint?.toMap(), }; } class OnDeselectedCommandBrowseEndpoint { String? browseId; String? params; OnDeselectedCommandBrowseEndpoint({ this.browseId, this.params, }); factory OnDeselectedCommandBrowseEndpoint.fromJson(String str) => OnDeselectedCommandBrowseEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory OnDeselectedCommandBrowseEndpoint.fromMap(Map json) => OnDeselectedCommandBrowseEndpoint( browseId: json["browseId"], params: json["params"], ); Map toMap() => { "browseId": browseId, "params": params, }; } class Style { String? styleType; Style({ this.styleType, }); factory Style.fromJson(String str) => Style.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Style.fromMap(Map json) => Style( styleType: json["styleType"], ); Map toMap() => { "styleType": styleType, }; } class Endpoint { String? clickTrackingParams; EndpointBrowseEndpoint? browseEndpoint; Endpoint({ this.clickTrackingParams, this.browseEndpoint, }); factory Endpoint.fromJson(String str) => Endpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Endpoint.fromMap(Map json) => Endpoint( clickTrackingParams: json["clickTrackingParams"], browseEndpoint: json["browseEndpoint"] == null ? null : EndpointBrowseEndpoint.fromMap(json["browseEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "browseEndpoint": browseEndpoint?.toMap(), }; } class EndpointBrowseEndpoint { String? browseId; EndpointBrowseEndpoint({ this.browseId, }); factory EndpointBrowseEndpoint.fromJson(String str) => EndpointBrowseEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory EndpointBrowseEndpoint.fromMap(Map json) => EndpointBrowseEndpoint( browseId: json["browseId"], ); Map toMap() => { "browseId": browseId, }; } class ContinuationContents { SectionList? sectionListContinuation; ContinuationContents({ this.sectionListContinuation, }); factory ContinuationContents.fromJson(String str) => ContinuationContents.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ContinuationContents.fromMap(Map json) => ContinuationContents( sectionListContinuation: json["sectionListContinuation"] == null ? null : SectionList.fromMap(json["sectionListContinuation"]), ); Map toMap() => { "sectionListContinuation": sectionListContinuation?.toMap(), }; } class ResponseContext { String? visitorData; List? serviceTrackingParams; int? maxAgeSeconds; ResponseContext({ this.visitorData, this.serviceTrackingParams, this.maxAgeSeconds, }); factory ResponseContext.fromJson(String str) => ResponseContext.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ResponseContext.fromMap(Map json) => ResponseContext( visitorData: json["visitorData"], serviceTrackingParams: json["serviceTrackingParams"] == null ? [] : List.from(json["serviceTrackingParams"]!.map((x) => ServiceTrackingParam.fromMap(x))), maxAgeSeconds: json["maxAgeSeconds"], ); Map toMap() => { "visitorData": visitorData, "serviceTrackingParams": serviceTrackingParams == null ? [] : List.from(serviceTrackingParams!.map((x) => x.toMap())), "maxAgeSeconds": maxAgeSeconds, }; } class ServiceTrackingParam { String? service; List? params; ServiceTrackingParam({ this.service, this.params, }); factory ServiceTrackingParam.fromJson(String str) => ServiceTrackingParam.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ServiceTrackingParam.fromMap(Map json) => ServiceTrackingParam( service: json["service"], params: json["params"] == null ? [] : List.from(json["params"]!.map((x) => Param.fromMap(x))), ); Map toMap() => { "service": service, "params": params == null ? [] : List.from(params!.map((x) => x.toMap())), }; } class Param { String? key; String? value; Param({ this.key, this.value, }); factory Param.fromJson(String str) => Param.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Param.fromMap(Map json) => Param( key: json["key"], value: json["value"], ); Map toMap() => { "key": key, "value": value, }; } class TwoColumnBrowseResultsRenderer { SecondaryContents? secondaryContents; List? tabs; TwoColumnBrowseResultsRenderer({ this.secondaryContents, this.tabs, }); factory TwoColumnBrowseResultsRenderer.fromJson(String str) => TwoColumnBrowseResultsRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory TwoColumnBrowseResultsRenderer.fromMap(Map json) => TwoColumnBrowseResultsRenderer( secondaryContents: json["secondaryContents"] == null ? null : SecondaryContents.fromMap(json["secondaryContents"]), tabs: json["tabs"] == null ? [] : List.from(json["tabs"]!.map((x) => Tab.fromMap(x))), ); Map toMap() => { "secondaryContents": secondaryContents?.toMap(), "tabs": tabs == null ? [] : List.from(tabs!.map((x) => x.toMap())), }; } class SecondaryContents { SecondaryContentsSectionListRenderer? sectionListRenderer; SecondaryContents({ this.sectionListRenderer, }); factory SecondaryContents.fromJson(String str) => SecondaryContents.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SecondaryContents.fromMap(Map json) => SecondaryContents( sectionListRenderer: json["sectionListRenderer"] == null ? null : SecondaryContentsSectionListRenderer.fromMap(json["sectionListRenderer"]), ); Map toMap() => { "sectionListRenderer": sectionListRenderer?.toMap(), }; } class SecondaryContentsSectionListRenderer { List? contents; String? trackingParams; SecondaryContentsSectionListRenderer({ this.contents, this.trackingParams, }); factory SecondaryContentsSectionListRenderer.fromJson(String str) => SecondaryContentsSectionListRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory SecondaryContentsSectionListRenderer.fromMap(Map json) => SecondaryContentsSectionListRenderer( contents: json["contents"] == null ? [] : List.from(json["contents"]!.map((x) => PurpleContent.fromMap(x))), trackingParams: json["trackingParams"], ); Map toMap() => { "contents": contents == null ? [] : List.from(contents!.map((x) => x.toMap())), "trackingParams": trackingParams, }; } class MusicShelfRenderer { List? contents; String? trackingParams; ShelfDivider? shelfDivider; bool? contentsMultiSelectable; MusicShelfRenderer({ this.contents, this.trackingParams, this.shelfDivider, this.contentsMultiSelectable, }); factory MusicShelfRenderer.fromJson(String str) => MusicShelfRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicShelfRenderer.fromMap(Map json) => MusicShelfRenderer( contents: json["contents"] == null ? [] : List.from(json["contents"]!.map((x) => MusicShelfRendererContent.fromMap(x))), trackingParams: json["trackingParams"], shelfDivider: json["shelfDivider"] == null ? null : ShelfDivider.fromMap(json["shelfDivider"]), contentsMultiSelectable: json["contentsMultiSelectable"], ); Map toMap() => { "contents": contents == null ? [] : List.from(contents!.map((x) => x.toMap())), "trackingParams": trackingParams, "shelfDivider": shelfDivider?.toMap(), "contentsMultiSelectable": contentsMultiSelectable, }; } class MusicShelfRendererContent { MusicResponsiveListItemRenderer? musicResponsiveListItemRenderer; MusicShelfRendererContent({ this.musicResponsiveListItemRenderer, }); factory MusicShelfRendererContent.fromJson(String str) => MusicShelfRendererContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicShelfRendererContent.fromMap(Map json) => MusicShelfRendererContent( musicResponsiveListItemRenderer: json["musicResponsiveListItemRenderer"] == null ? null : MusicResponsiveListItemRenderer.fromMap(json["musicResponsiveListItemRenderer"]), ); Map toMap() => { "musicResponsiveListItemRenderer": musicResponsiveListItemRenderer?.toMap(), }; } class FixedColumn { MusicResponsiveListItemFixedColumnRenderer? musicResponsiveListItemFixedColumnRenderer; FixedColumn({ this.musicResponsiveListItemFixedColumnRenderer, }); factory FixedColumn.fromJson(String str) => FixedColumn.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory FixedColumn.fromMap(Map json) => FixedColumn( musicResponsiveListItemFixedColumnRenderer: json["musicResponsiveListItemFixedColumnRenderer"] == null ? null : MusicResponsiveListItemFixedColumnRenderer.fromMap(json["musicResponsiveListItemFixedColumnRenderer"]), ); Map toMap() => { "musicResponsiveListItemFixedColumnRenderer": musicResponsiveListItemFixedColumnRenderer?.toMap(), }; } class MusicResponsiveListItemFixedColumnRenderer { Index? text; String? displayPriority; String? size; MusicResponsiveListItemFixedColumnRenderer({ this.text, this.displayPriority, this.size, }); factory MusicResponsiveListItemFixedColumnRenderer.fromJson(String str) => MusicResponsiveListItemFixedColumnRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicResponsiveListItemFixedColumnRenderer.fromMap(Map json) => MusicResponsiveListItemFixedColumnRenderer( text: json["text"] == null ? null : Index.fromMap(json["text"]), displayPriority: json["displayPriority"], size: json["size"], ); Map toMap() => { "text": text?.toMap(), "displayPriority": displayPriority, "size": size, }; } class Index { List? runs; Index({ this.runs, }); factory Index.fromJson(String str) => Index.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Index.fromMap(Map json) => Index( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => IndexRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class IndexRun { String? text; IndexRun({ this.text, }); factory IndexRun.fromJson(String str) => IndexRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory IndexRun.fromMap(Map json) => IndexRun( text: json["text"], ); Map toMap() => { "text": text, }; } class NavigationEndpoint { String? clickTrackingParams; PlayNavigationEndpointWatchEndpoint? watchEndpoint; NavigationEndpoint({ this.clickTrackingParams, this.watchEndpoint, }); factory NavigationEndpoint.fromJson(String str) => NavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory NavigationEndpoint.fromMap(Map json) => NavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], watchEndpoint: json["watchEndpoint"] == null ? null : PlayNavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "watchEndpoint": watchEndpoint?.toMap(), }; } class PlayNavigationEndpointWatchEndpoint { String? videoId; String? playlistId; LoggingContext? loggingContext; WatchEndpointMusicSupportedConfigs? watchEndpointMusicSupportedConfigs; String? params; int? index; PlayNavigationEndpointWatchEndpoint({ this.videoId, this.playlistId, this.loggingContext, this.watchEndpointMusicSupportedConfigs, this.params, this.index, }); factory PlayNavigationEndpointWatchEndpoint.fromJson(String str) => PlayNavigationEndpointWatchEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory PlayNavigationEndpointWatchEndpoint.fromMap(Map json) => PlayNavigationEndpointWatchEndpoint( videoId: json["videoId"], playlistId: json["playlistId"], loggingContext: json["loggingContext"] == null ? null : LoggingContext.fromMap(json["loggingContext"]), watchEndpointMusicSupportedConfigs: json["watchEndpointMusicSupportedConfigs"] == null ? null : WatchEndpointMusicSupportedConfigs.fromMap(json["watchEndpointMusicSupportedConfigs"]), params: json["params"], index: json["index"], ); Map toMap() => { "videoId": videoId, "playlistId": playlistId, "loggingContext": loggingContext?.toMap(), "watchEndpointMusicSupportedConfigs": watchEndpointMusicSupportedConfigs?.toMap(), "params": params, "index": index, }; } class Menu { MenuMenuRenderer? menuRenderer; Menu({ this.menuRenderer, }); factory Menu.fromJson(String str) => Menu.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Menu.fromMap(Map json) => Menu( menuRenderer: json["menuRenderer"] == null ? null : MenuMenuRenderer.fromMap(json["menuRenderer"]), ); Map toMap() => { "menuRenderer": menuRenderer?.toMap(), }; } class MenuMenuRenderer { List? items; String? trackingParams; List? topLevelButtons; Accessibility? accessibility; MenuMenuRenderer({ this.items, this.trackingParams, this.topLevelButtons, this.accessibility, }); factory MenuMenuRenderer.fromJson(String str) => MenuMenuRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MenuMenuRenderer.fromMap(Map json) => MenuMenuRenderer( items: json["items"] == null ? [] : List.from(json["items"]!.map((x) => PurpleItem.fromMap(x))), trackingParams: json["trackingParams"], topLevelButtons: json["topLevelButtons"] == null ? [] : List.from(json["topLevelButtons"]!.map((x) => TopLevelButton.fromMap(x))), accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]), ); Map toMap() => { "items": items == null ? [] : List.from(items!.map((x) => x.toMap())), "trackingParams": trackingParams, "topLevelButtons": topLevelButtons == null ? [] : List.from(topLevelButtons!.map((x) => x.toMap())), "accessibility": accessibility?.toMap(), }; } class BrowseEndpoint { String? browseId; BrowseEndpointContextSupportedConfigs? browseEndpointContextSupportedConfigs; BrowseEndpoint({ this.browseId, this.browseEndpointContextSupportedConfigs, }); factory BrowseEndpoint.fromJson(String str) => BrowseEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory BrowseEndpoint.fromMap(Map json) => BrowseEndpoint( browseId: json["browseId"], browseEndpointContextSupportedConfigs: json["browseEndpointContextSupportedConfigs"] == null ? null : BrowseEndpointContextSupportedConfigs.fromMap(json["browseEndpointContextSupportedConfigs"]), ); Map toMap() => { "browseId": browseId, "browseEndpointContextSupportedConfigs": browseEndpointContextSupportedConfigs?.toMap(), }; } class ModalWithTitleAndButtonRendererButton { ButtonRenderer? buttonRenderer; ModalWithTitleAndButtonRendererButton({ this.buttonRenderer, }); factory ModalWithTitleAndButtonRendererButton.fromJson(String str) => ModalWithTitleAndButtonRendererButton.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ModalWithTitleAndButtonRendererButton.fromMap(Map json) => ModalWithTitleAndButtonRendererButton( buttonRenderer: json["buttonRenderer"] == null ? null : ButtonRenderer.fromMap(json["buttonRenderer"]), ); Map toMap() => { "buttonRenderer": buttonRenderer?.toMap(), }; } class ButtonRenderer { String? style; bool? isDisabled; Index? text; ButtonRendererNavigationEndpoint? navigationEndpoint; String? trackingParams; ButtonRenderer({ this.style, this.isDisabled, this.text, this.navigationEndpoint, this.trackingParams, }); factory ButtonRenderer.fromJson(String str) => ButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonRenderer.fromMap(Map json) => ButtonRenderer( style: json["style"], isDisabled: json["isDisabled"], text: json["text"] == null ? null : Index.fromMap(json["text"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : ButtonRendererNavigationEndpoint.fromMap(json["navigationEndpoint"]), trackingParams: json["trackingParams"], ); Map toMap() => { "style": style, "isDisabled": isDisabled, "text": text?.toMap(), "navigationEndpoint": navigationEndpoint?.toMap(), "trackingParams": trackingParams, }; } class ButtonRendererNavigationEndpoint { String? clickTrackingParams; SignInEndpoint? signInEndpoint; ButtonRendererNavigationEndpoint({ this.clickTrackingParams, this.signInEndpoint, }); factory ButtonRendererNavigationEndpoint.fromJson(String str) => ButtonRendererNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonRendererNavigationEndpoint.fromMap(Map json) => ButtonRendererNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], signInEndpoint: json["signInEndpoint"] == null ? null : SignInEndpoint.fromMap(json["signInEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "signInEndpoint": signInEndpoint?.toMap(), }; } class DefaultNavigationEndpoint { String? clickTrackingParams; ModalEndpoint? modalEndpoint; DefaultNavigationEndpoint({ this.clickTrackingParams, this.modalEndpoint, }); factory DefaultNavigationEndpoint.fromJson(String str) => DefaultNavigationEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory DefaultNavigationEndpoint.fromMap(Map json) => DefaultNavigationEndpoint( clickTrackingParams: json["clickTrackingParams"], modalEndpoint: json["modalEndpoint"] == null ? null : ModalEndpoint.fromMap(json["modalEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "modalEndpoint": modalEndpoint?.toMap(), }; } class LikeButtonRendererTarget { String? videoId; LikeButtonRendererTarget({ this.videoId, }); factory LikeButtonRendererTarget.fromJson(String str) => LikeButtonRendererTarget.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory LikeButtonRendererTarget.fromMap(Map json) => LikeButtonRendererTarget( videoId: json["videoId"], ); Map toMap() => { "videoId": videoId, }; } class MultiSelectCheckbox { CheckboxRenderer? checkboxRenderer; MultiSelectCheckbox({ this.checkboxRenderer, }); factory MultiSelectCheckbox.fromJson(String str) => MultiSelectCheckbox.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MultiSelectCheckbox.fromMap(Map json) => MultiSelectCheckbox( checkboxRenderer: json["checkboxRenderer"] == null ? null : CheckboxRenderer.fromMap(json["checkboxRenderer"]), ); Map toMap() => { "checkboxRenderer": checkboxRenderer?.toMap(), }; } class CheckboxRenderer { OnSelectionChangeCommand? onSelectionChangeCommand; String? checkedState; String? trackingParams; CheckboxRenderer({ this.onSelectionChangeCommand, this.checkedState, this.trackingParams, }); factory CheckboxRenderer.fromJson(String str) => CheckboxRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory CheckboxRenderer.fromMap(Map json) => CheckboxRenderer( onSelectionChangeCommand: json["onSelectionChangeCommand"] == null ? null : OnSelectionChangeCommand.fromMap(json["onSelectionChangeCommand"]), checkedState: json["checkedState"], trackingParams: json["trackingParams"], ); Map toMap() => { "onSelectionChangeCommand": onSelectionChangeCommand?.toMap(), "checkedState": checkedState, "trackingParams": trackingParams, }; } class OnSelectionChangeCommand { String? clickTrackingParams; UpdateMultiSelectStateCommand? updateMultiSelectStateCommand; OnSelectionChangeCommand({ this.clickTrackingParams, this.updateMultiSelectStateCommand, }); factory OnSelectionChangeCommand.fromJson(String str) => OnSelectionChangeCommand.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory OnSelectionChangeCommand.fromMap(Map json) => OnSelectionChangeCommand( clickTrackingParams: json["clickTrackingParams"], updateMultiSelectStateCommand: json["updateMultiSelectStateCommand"] == null ? null : UpdateMultiSelectStateCommand.fromMap(json["updateMultiSelectStateCommand"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "updateMultiSelectStateCommand": updateMultiSelectStateCommand?.toMap(), }; } class UpdateMultiSelectStateCommand { String? multiSelectParams; String? multiSelectItem; UpdateMultiSelectStateCommand({ this.multiSelectParams, this.multiSelectItem, }); factory UpdateMultiSelectStateCommand.fromJson(String str) => UpdateMultiSelectStateCommand.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory UpdateMultiSelectStateCommand.fromMap(Map json) => UpdateMultiSelectStateCommand( multiSelectParams: json["multiSelectParams"], multiSelectItem: json["multiSelectItem"], ); Map toMap() => { "multiSelectParams": multiSelectParams, "multiSelectItem": multiSelectItem, }; } class MusicItemThumbnailOverlayRenderer { Background? background; MusicItemThumbnailOverlayRendererContent? content; String? contentPosition; String? displayStyle; MusicItemThumbnailOverlayRenderer({ this.background, this.content, this.contentPosition, this.displayStyle, }); factory MusicItemThumbnailOverlayRenderer.fromJson(String str) => MusicItemThumbnailOverlayRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicItemThumbnailOverlayRenderer.fromMap(Map json) => MusicItemThumbnailOverlayRenderer( background: json["background"] == null ? null : Background.fromMap(json["background"]), content: json["content"] == null ? null : MusicItemThumbnailOverlayRendererContent.fromMap(json["content"]), contentPosition: json["contentPosition"], displayStyle: json["displayStyle"], ); Map toMap() => { "background": background?.toMap(), "content": content?.toMap(), "contentPosition": contentPosition, "displayStyle": displayStyle, }; } class Background { VerticalGradient? verticalGradient; Background({ this.verticalGradient, }); factory Background.fromJson(String str) => Background.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Background.fromMap(Map json) => Background( verticalGradient: json["verticalGradient"] == null ? null : VerticalGradient.fromMap(json["verticalGradient"]), ); Map toMap() => { "verticalGradient": verticalGradient?.toMap(), }; } class MusicItemThumbnailOverlayRendererContent { ContentMusicPlayButtonRenderer? musicPlayButtonRenderer; MusicItemThumbnailOverlayRendererContent({ this.musicPlayButtonRenderer, }); factory MusicItemThumbnailOverlayRendererContent.fromJson(String str) => MusicItemThumbnailOverlayRendererContent.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicItemThumbnailOverlayRendererContent.fromMap(Map json) => MusicItemThumbnailOverlayRendererContent( musicPlayButtonRenderer: json["musicPlayButtonRenderer"] == null ? null : ContentMusicPlayButtonRenderer.fromMap(json["musicPlayButtonRenderer"]), ); Map toMap() => { "musicPlayButtonRenderer": musicPlayButtonRenderer?.toMap(), }; } class ContentMusicPlayButtonRenderer { NavigationEndpoint? playNavigationEndpoint; String? trackingParams; Icon? playIcon; Icon? pauseIcon; int? iconColor; int? backgroundColor; int? activeBackgroundColor; int? loadingIndicatorColor; Icon? playingIcon; int? iconLoadingColor; int? activeScaleFactor; String? buttonSize; String? rippleTarget; Accessibility? accessibilityPlayData; Accessibility? accessibilityPauseData; ContentMusicPlayButtonRenderer({ this.playNavigationEndpoint, this.trackingParams, this.playIcon, this.pauseIcon, this.iconColor, this.backgroundColor, this.activeBackgroundColor, this.loadingIndicatorColor, this.playingIcon, this.iconLoadingColor, this.activeScaleFactor, this.buttonSize, this.rippleTarget, this.accessibilityPlayData, this.accessibilityPauseData, }); factory ContentMusicPlayButtonRenderer.fromJson(String str) => ContentMusicPlayButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ContentMusicPlayButtonRenderer.fromMap(Map json) => ContentMusicPlayButtonRenderer( playNavigationEndpoint: json["playNavigationEndpoint"] == null ? null : NavigationEndpoint.fromMap(json["playNavigationEndpoint"]), trackingParams: json["trackingParams"], playIcon: json["playIcon"] == null ? null : Icon.fromMap(json["playIcon"]), pauseIcon: json["pauseIcon"] == null ? null : Icon.fromMap(json["pauseIcon"]), iconColor: json["iconColor"], backgroundColor: json["backgroundColor"], activeBackgroundColor: json["activeBackgroundColor"], loadingIndicatorColor: json["loadingIndicatorColor"], playingIcon: json["playingIcon"] == null ? null : Icon.fromMap(json["playingIcon"]), iconLoadingColor: json["iconLoadingColor"], activeScaleFactor: json["activeScaleFactor"], buttonSize: json["buttonSize"], rippleTarget: json["rippleTarget"], accessibilityPlayData: json["accessibilityPlayData"] == null ? null : Accessibility.fromMap(json["accessibilityPlayData"]), accessibilityPauseData: json["accessibilityPauseData"] == null ? null : Accessibility.fromMap(json["accessibilityPauseData"]), ); Map toMap() => { "playNavigationEndpoint": playNavigationEndpoint?.toMap(), "trackingParams": trackingParams, "playIcon": playIcon?.toMap(), "pauseIcon": pauseIcon?.toMap(), "iconColor": iconColor, "backgroundColor": backgroundColor, "activeBackgroundColor": activeBackgroundColor, "loadingIndicatorColor": loadingIndicatorColor, "playingIcon": playingIcon?.toMap(), "iconLoadingColor": iconLoadingColor, "activeScaleFactor": activeScaleFactor, "buttonSize": buttonSize, "rippleTarget": rippleTarget, "accessibilityPlayData": accessibilityPlayData?.toMap(), "accessibilityPauseData": accessibilityPauseData?.toMap(), }; } class ShelfDivider { MusicShelfDividerRenderer? musicShelfDividerRenderer; ShelfDivider({ this.musicShelfDividerRenderer, }); factory ShelfDivider.fromJson(String str) => ShelfDivider.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ShelfDivider.fromMap(Map json) => ShelfDivider( musicShelfDividerRenderer: json["musicShelfDividerRenderer"] == null ? null : MusicShelfDividerRenderer.fromMap(json["musicShelfDividerRenderer"]), ); Map toMap() => { "musicShelfDividerRenderer": musicShelfDividerRenderer?.toMap(), }; } class MusicShelfDividerRenderer { bool? hidden; MusicShelfDividerRenderer({ this.hidden, }); factory MusicShelfDividerRenderer.fromJson(String str) => MusicShelfDividerRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicShelfDividerRenderer.fromMap(Map json) => MusicShelfDividerRenderer( hidden: json["hidden"], ); Map toMap() => { "hidden": hidden, }; } class ContentSectionListRenderer { List? contents; String? trackingParams; ContentSectionListRenderer({ this.contents, this.trackingParams, }); factory ContentSectionListRenderer.fromJson(String str) => ContentSectionListRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ContentSectionListRenderer.fromMap(Map json) => ContentSectionListRenderer( contents: json["contents"] == null ? [] : List.from(json["contents"]!.map((x) => FluffyContent.fromMap(x))), trackingParams: json["trackingParams"], ); Map toMap() => { "contents": contents == null ? [] : List.from(contents!.map((x) => x.toMap())), "trackingParams": trackingParams, }; } class MusicResponsiveHeaderRenderer { StraplineThumbnailClass? thumbnail; List? buttons; Index? title; Index? subtitle; String? trackingParams; StraplineTextOne? straplineTextOne; StraplineThumbnailClass? straplineThumbnail; MusicResponsiveHeaderRendererDescription? description; Index? secondSubtitle; MusicResponsiveHeaderRenderer({ this.thumbnail, this.buttons, this.title, this.subtitle, this.trackingParams, this.straplineTextOne, this.straplineThumbnail, this.description, this.secondSubtitle, }); factory MusicResponsiveHeaderRenderer.fromJson(String str) => MusicResponsiveHeaderRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicResponsiveHeaderRenderer.fromMap(Map json) => MusicResponsiveHeaderRenderer( thumbnail: json["thumbnail"] == null ? null : StraplineThumbnailClass.fromMap(json["thumbnail"]), buttons: json["buttons"] == null ? [] : List.from(json["buttons"]!.map((x) => ButtonElement.fromMap(x))), title: json["title"] == null ? null : Index.fromMap(json["title"]), subtitle: json["subtitle"] == null ? null : Index.fromMap(json["subtitle"]), trackingParams: json["trackingParams"], straplineTextOne: json["straplineTextOne"] == null ? null : StraplineTextOne.fromMap(json["straplineTextOne"]), straplineThumbnail: json["straplineThumbnail"] == null ? null : StraplineThumbnailClass.fromMap(json["straplineThumbnail"]), description: json["description"] == null ? null : MusicResponsiveHeaderRendererDescription.fromMap(json["description"]), secondSubtitle: json["secondSubtitle"] == null ? null : Index.fromMap(json["secondSubtitle"]), ); Map toMap() => { "thumbnail": thumbnail?.toMap(), "buttons": buttons == null ? [] : List.from(buttons!.map((x) => x.toMap())), "title": title?.toMap(), "subtitle": subtitle?.toMap(), "trackingParams": trackingParams, "straplineTextOne": straplineTextOne?.toMap(), "straplineThumbnail": straplineThumbnail?.toMap(), "description": description?.toMap(), "secondSubtitle": secondSubtitle?.toMap(), }; } class ButtonElement { ButtonToggleButtonRenderer? toggleButtonRenderer; ButtonMusicPlayButtonRenderer? musicPlayButtonRenderer; ButtonMenuRenderer? menuRenderer; ButtonElement({ this.toggleButtonRenderer, this.musicPlayButtonRenderer, this.menuRenderer, }); factory ButtonElement.fromJson(String str) => ButtonElement.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonElement.fromMap(Map json) => ButtonElement( toggleButtonRenderer: json["toggleButtonRenderer"] == null ? null : ButtonToggleButtonRenderer.fromMap(json["toggleButtonRenderer"]), musicPlayButtonRenderer: json["musicPlayButtonRenderer"] == null ? null : ButtonMusicPlayButtonRenderer.fromMap(json["musicPlayButtonRenderer"]), menuRenderer: json["menuRenderer"] == null ? null : ButtonMenuRenderer.fromMap(json["menuRenderer"]), ); Map toMap() => { "toggleButtonRenderer": toggleButtonRenderer?.toMap(), "musicPlayButtonRenderer": musicPlayButtonRenderer?.toMap(), "menuRenderer": menuRenderer?.toMap(), }; } class ButtonMenuRenderer { List? items; String? trackingParams; Accessibility? accessibility; ButtonMenuRenderer({ this.items, this.trackingParams, this.accessibility, }); factory ButtonMenuRenderer.fromJson(String str) => ButtonMenuRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonMenuRenderer.fromMap(Map json) => ButtonMenuRenderer( items: json["items"] == null ? [] : List.from(json["items"]!.map((x) => FluffyItem.fromMap(x))), trackingParams: json["trackingParams"], accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]), ); Map toMap() => { "items": items == null ? [] : List.from(items!.map((x) => x.toMap())), "trackingParams": trackingParams, "accessibility": accessibility?.toMap(), }; } class ToggleMenuServiceItemRenderer { Index? defaultText; Icon? defaultIcon; DefaultNavigationEndpoint? defaultServiceEndpoint; Index? toggledText; Icon? toggledIcon; ToggledServiceEndpoint? toggledServiceEndpoint; String? trackingParams; ToggleMenuServiceItemRenderer({ this.defaultText, this.defaultIcon, this.defaultServiceEndpoint, this.toggledText, this.toggledIcon, this.toggledServiceEndpoint, this.trackingParams, }); factory ToggleMenuServiceItemRenderer.fromJson(String str) => ToggleMenuServiceItemRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ToggleMenuServiceItemRenderer.fromMap(Map json) => ToggleMenuServiceItemRenderer( defaultText: json["defaultText"] == null ? null : Index.fromMap(json["defaultText"]), defaultIcon: json["defaultIcon"] == null ? null : Icon.fromMap(json["defaultIcon"]), defaultServiceEndpoint: json["defaultServiceEndpoint"] == null ? null : DefaultNavigationEndpoint.fromMap(json["defaultServiceEndpoint"]), toggledText: json["toggledText"] == null ? null : Index.fromMap(json["toggledText"]), toggledIcon: json["toggledIcon"] == null ? null : Icon.fromMap(json["toggledIcon"]), toggledServiceEndpoint: json["toggledServiceEndpoint"] == null ? null : ToggledServiceEndpoint.fromMap(json["toggledServiceEndpoint"]), trackingParams: json["trackingParams"], ); Map toMap() => { "defaultText": defaultText?.toMap(), "defaultIcon": defaultIcon?.toMap(), "defaultServiceEndpoint": defaultServiceEndpoint?.toMap(), "toggledText": toggledText?.toMap(), "toggledIcon": toggledIcon?.toMap(), "toggledServiceEndpoint": toggledServiceEndpoint?.toMap(), "trackingParams": trackingParams, }; } class ToggledServiceEndpoint { String? clickTrackingParams; LikeEndpoint? likeEndpoint; ToggledServiceEndpoint({ this.clickTrackingParams, this.likeEndpoint, }); factory ToggledServiceEndpoint.fromJson(String str) => ToggledServiceEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ToggledServiceEndpoint.fromMap(Map json) => ToggledServiceEndpoint( clickTrackingParams: json["clickTrackingParams"], likeEndpoint: json["likeEndpoint"] == null ? null : LikeEndpoint.fromMap(json["likeEndpoint"]), ); Map toMap() => { "clickTrackingParams": clickTrackingParams, "likeEndpoint": likeEndpoint?.toMap(), }; } class LikeEndpointTarget { String? playlistId; LikeEndpointTarget({ this.playlistId, }); factory LikeEndpointTarget.fromJson(String str) => LikeEndpointTarget.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory LikeEndpointTarget.fromMap(Map json) => LikeEndpointTarget( playlistId: json["playlistId"], ); Map toMap() => { "playlistId": playlistId, }; } class ButtonMusicPlayButtonRenderer { NavigationEndpoint? playNavigationEndpoint; String? trackingParams; Icon? playIcon; Icon? pauseIcon; int? iconColor; int? backgroundColor; int? activeBackgroundColor; int? loadingIndicatorColor; Icon? playingIcon; int? iconLoadingColor; int? activeScaleFactor; Accessibility? accessibilityPlayData; Accessibility? accessibilityPauseData; ButtonMusicPlayButtonRenderer({ this.playNavigationEndpoint, this.trackingParams, this.playIcon, this.pauseIcon, this.iconColor, this.backgroundColor, this.activeBackgroundColor, this.loadingIndicatorColor, this.playingIcon, this.iconLoadingColor, this.activeScaleFactor, this.accessibilityPlayData, this.accessibilityPauseData, }); factory ButtonMusicPlayButtonRenderer.fromJson(String str) => ButtonMusicPlayButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonMusicPlayButtonRenderer.fromMap(Map json) => ButtonMusicPlayButtonRenderer( playNavigationEndpoint: json["playNavigationEndpoint"] == null ? null : NavigationEndpoint.fromMap(json["playNavigationEndpoint"]), trackingParams: json["trackingParams"], playIcon: json["playIcon"] == null ? null : Icon.fromMap(json["playIcon"]), pauseIcon: json["pauseIcon"] == null ? null : Icon.fromMap(json["pauseIcon"]), iconColor: json["iconColor"], backgroundColor: json["backgroundColor"], activeBackgroundColor: json["activeBackgroundColor"], loadingIndicatorColor: json["loadingIndicatorColor"], playingIcon: json["playingIcon"] == null ? null : Icon.fromMap(json["playingIcon"]), iconLoadingColor: json["iconLoadingColor"], activeScaleFactor: json["activeScaleFactor"], accessibilityPlayData: json["accessibilityPlayData"] == null ? null : Accessibility.fromMap(json["accessibilityPlayData"]), accessibilityPauseData: json["accessibilityPauseData"] == null ? null : Accessibility.fromMap(json["accessibilityPauseData"]), ); Map toMap() => { "playNavigationEndpoint": playNavigationEndpoint?.toMap(), "trackingParams": trackingParams, "playIcon": playIcon?.toMap(), "pauseIcon": pauseIcon?.toMap(), "iconColor": iconColor, "backgroundColor": backgroundColor, "activeBackgroundColor": activeBackgroundColor, "loadingIndicatorColor": loadingIndicatorColor, "playingIcon": playingIcon?.toMap(), "iconLoadingColor": iconLoadingColor, "activeScaleFactor": activeScaleFactor, "accessibilityPlayData": accessibilityPlayData?.toMap(), "accessibilityPauseData": accessibilityPauseData?.toMap(), }; } class ButtonToggleButtonRenderer { bool? isToggled; bool? isDisabled; Icon? defaultIcon; Icon? toggledIcon; String? trackingParams; DefaultNavigationEndpoint? defaultNavigationEndpoint; Accessibility? accessibilityData; Accessibility? toggledAccessibilityData; ButtonToggleButtonRenderer({ this.isToggled, this.isDisabled, this.defaultIcon, this.toggledIcon, this.trackingParams, this.defaultNavigationEndpoint, this.accessibilityData, this.toggledAccessibilityData, }); factory ButtonToggleButtonRenderer.fromJson(String str) => ButtonToggleButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory ButtonToggleButtonRenderer.fromMap(Map json) => ButtonToggleButtonRenderer( isToggled: json["isToggled"], isDisabled: json["isDisabled"], defaultIcon: json["defaultIcon"] == null ? null : Icon.fromMap(json["defaultIcon"]), toggledIcon: json["toggledIcon"] == null ? null : Icon.fromMap(json["toggledIcon"]), trackingParams: json["trackingParams"], defaultNavigationEndpoint: json["defaultNavigationEndpoint"] == null ? null : DefaultNavigationEndpoint.fromMap(json["defaultNavigationEndpoint"]), accessibilityData: json["accessibilityData"] == null ? null : Accessibility.fromMap(json["accessibilityData"]), toggledAccessibilityData: json["toggledAccessibilityData"] == null ? null : Accessibility.fromMap(json["toggledAccessibilityData"]), ); Map toMap() => { "isToggled": isToggled, "isDisabled": isDisabled, "defaultIcon": defaultIcon?.toMap(), "toggledIcon": toggledIcon?.toMap(), "trackingParams": trackingParams, "defaultNavigationEndpoint": defaultNavigationEndpoint?.toMap(), "accessibilityData": accessibilityData?.toMap(), "toggledAccessibilityData": toggledAccessibilityData?.toMap(), }; } class MusicResponsiveHeaderRendererDescription { MusicDescriptionShelfRenderer? musicDescriptionShelfRenderer; MusicResponsiveHeaderRendererDescription({ this.musicDescriptionShelfRenderer, }); factory MusicResponsiveHeaderRendererDescription.fromJson(String str) => MusicResponsiveHeaderRendererDescription.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicResponsiveHeaderRendererDescription.fromMap(Map json) => MusicResponsiveHeaderRendererDescription( musicDescriptionShelfRenderer: json["musicDescriptionShelfRenderer"] == null ? null : MusicDescriptionShelfRenderer.fromMap(json["musicDescriptionShelfRenderer"]), ); Map toMap() => { "musicDescriptionShelfRenderer": musicDescriptionShelfRenderer?.toMap(), }; } class MusicDescriptionShelfRenderer { MusicDescriptionShelfRendererDescription? description; MoreButton? moreButton; String? trackingParams; String? shelfStyle; MusicDescriptionShelfRenderer({ this.description, this.moreButton, this.trackingParams, this.shelfStyle, }); factory MusicDescriptionShelfRenderer.fromJson(String str) => MusicDescriptionShelfRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicDescriptionShelfRenderer.fromMap(Map json) => MusicDescriptionShelfRenderer( description: json["description"] == null ? null : MusicDescriptionShelfRendererDescription.fromMap(json["description"]), moreButton: json["moreButton"] == null ? null : MoreButton.fromMap(json["moreButton"]), trackingParams: json["trackingParams"], shelfStyle: json["shelfStyle"], ); Map toMap() => { "description": description?.toMap(), "moreButton": moreButton?.toMap(), "trackingParams": trackingParams, "shelfStyle": shelfStyle, }; } class MusicDescriptionShelfRendererDescription { List? runs; MusicDescriptionShelfRendererDescription({ this.runs, }); factory MusicDescriptionShelfRendererDescription.fromJson(String str) => MusicDescriptionShelfRendererDescription.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicDescriptionShelfRendererDescription.fromMap(Map json) => MusicDescriptionShelfRendererDescription( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => DescriptionRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class DescriptionRun { String? text; PurpleNavigationEndpoint? navigationEndpoint; DescriptionRun({ this.text, this.navigationEndpoint, }); factory DescriptionRun.fromJson(String str) => DescriptionRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory DescriptionRun.fromMap(Map json) => DescriptionRun( text: json["text"], navigationEndpoint: json["navigationEndpoint"] == null ? null : PurpleNavigationEndpoint.fromMap(json["navigationEndpoint"]), ); Map toMap() => { "text": text, "navigationEndpoint": navigationEndpoint?.toMap(), }; } class UrlEndpoint { String? url; String? target; UrlEndpoint({ this.url, this.target, }); factory UrlEndpoint.fromJson(String str) => UrlEndpoint.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory UrlEndpoint.fromMap(Map json) => UrlEndpoint( url: json["url"], target: json["target"], ); Map toMap() => { "url": url, "target": target, }; } class MoreButton { MoreButtonToggleButtonRenderer? toggleButtonRenderer; MoreButton({ this.toggleButtonRenderer, }); factory MoreButton.fromJson(String str) => MoreButton.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MoreButton.fromMap(Map json) => MoreButton( toggleButtonRenderer: json["toggleButtonRenderer"] == null ? null : MoreButtonToggleButtonRenderer.fromMap(json["toggleButtonRenderer"]), ); Map toMap() => { "toggleButtonRenderer": toggleButtonRenderer?.toMap(), }; } class MoreButtonToggleButtonRenderer { bool? isToggled; bool? isDisabled; Icon? defaultIcon; Index? defaultText; Icon? toggledIcon; Index? toggledText; String? trackingParams; MoreButtonToggleButtonRenderer({ this.isToggled, this.isDisabled, this.defaultIcon, this.defaultText, this.toggledIcon, this.toggledText, this.trackingParams, }); factory MoreButtonToggleButtonRenderer.fromJson(String str) => MoreButtonToggleButtonRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MoreButtonToggleButtonRenderer.fromMap(Map json) => MoreButtonToggleButtonRenderer( isToggled: json["isToggled"], isDisabled: json["isDisabled"], defaultIcon: json["defaultIcon"] == null ? null : Icon.fromMap(json["defaultIcon"]), defaultText: json["defaultText"] == null ? null : Index.fromMap(json["defaultText"]), toggledIcon: json["toggledIcon"] == null ? null : Icon.fromMap(json["toggledIcon"]), toggledText: json["toggledText"] == null ? null : Index.fromMap(json["toggledText"]), trackingParams: json["trackingParams"], ); Map toMap() => { "isToggled": isToggled, "isDisabled": isDisabled, "defaultIcon": defaultIcon?.toMap(), "defaultText": defaultText?.toMap(), "toggledIcon": toggledIcon?.toMap(), "toggledText": toggledText?.toMap(), "trackingParams": trackingParams, }; } class StraplineTextOne { List? runs; StraplineTextOne({ this.runs, }); factory StraplineTextOne.fromJson(String str) => StraplineTextOne.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory StraplineTextOne.fromMap(Map json) => StraplineTextOne( runs: json["runs"] == null ? [] : List.from(json["runs"]!.map((x) => StraplineTextOneRun.fromMap(x))), ); Map toMap() => { "runs": runs == null ? [] : List.from(runs!.map((x) => x.toMap())), }; } class StraplineTextOneRun { String? text; FluffyNavigationEndpoint? navigationEndpoint; StraplineTextOneRun({ this.text, this.navigationEndpoint, }); factory StraplineTextOneRun.fromJson(String str) => StraplineTextOneRun.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory StraplineTextOneRun.fromMap(Map json) => StraplineTextOneRun( text: json["text"], navigationEndpoint: json["navigationEndpoint"] == null ? null : FluffyNavigationEndpoint.fromMap(json["navigationEndpoint"]), ); Map toMap() => { "text": text, "navigationEndpoint": navigationEndpoint?.toMap(), }; } class StraplineThumbnailClass { MusicThumbnailRenderer? musicThumbnailRenderer; StraplineThumbnailClass({ this.musicThumbnailRenderer, }); factory StraplineThumbnailClass.fromJson(String str) => StraplineThumbnailClass.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory StraplineThumbnailClass.fromMap(Map json) => StraplineThumbnailClass( musicThumbnailRenderer: json["musicThumbnailRenderer"] == null ? null : MusicThumbnailRenderer.fromMap(json["musicThumbnailRenderer"]), ); Map toMap() => { "musicThumbnailRenderer": musicThumbnailRenderer?.toMap(), }; } class Microformat { MicroformatDataRenderer? microformatDataRenderer; Microformat({ this.microformatDataRenderer, }); factory Microformat.fromJson(String str) => Microformat.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory Microformat.fromMap(Map json) => Microformat( microformatDataRenderer: json["microformatDataRenderer"] == null ? null : MicroformatDataRenderer.fromMap(json["microformatDataRenderer"]), ); Map toMap() => { "microformatDataRenderer": microformatDataRenderer?.toMap(), }; } class MicroformatDataRenderer { String? urlCanonical; MicroformatDataRenderer({ this.urlCanonical, }); factory MicroformatDataRenderer.fromJson(String str) => MicroformatDataRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MicroformatDataRenderer.fromMap(Map json) => MicroformatDataRenderer( urlCanonical: json["urlCanonical"], ); Map toMap() => { "urlCanonical": urlCanonical, }; } class MusicPlaylistShelfRenderer { String? playlistId; List? contents; int? collapsedItemCount; String? trackingParams; bool? contentsMultiSelectable; MusicPlaylistShelfRenderer({ this.playlistId, this.contents, this.collapsedItemCount, this.trackingParams, this.contentsMultiSelectable, }); factory MusicPlaylistShelfRenderer.fromJson(String str) => MusicPlaylistShelfRenderer.fromMap(json.decode(str)); String toJson() => json.encode(toMap()); factory MusicPlaylistShelfRenderer.fromMap(Map json) => MusicPlaylistShelfRenderer( playlistId: json["playlistId"], contents: json["contents"] == null ? [] : List.from(json["contents"]!.map((x) => MusicShelfRendererContent.fromMap(x))), collapsedItemCount: json["collapsedItemCount"], trackingParams: json["trackingParams"], contentsMultiSelectable: json["contentsMultiSelectable"], ); Map toMap() => { "playlistId": playlistId, "contents": contents == null ? [] : List.from(contents!.map((x) => x.toMap())), "collapsedItemCount": collapsedItemCount, "trackingParams": trackingParams, "contentsMultiSelectable": contentsMultiSelectable, }; }