// Author: fengshengxiong // Date: 2024/6/18 // Description: Browse-首页模型 import 'dart:convert'; class BrowseModel { ResponseContext? responseContext; Contents? contents; ContinuationContents? continuationContents; String? trackingParams; 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; Contents({ this.singleColumnBrowseResultsRenderer, }); 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"]), ); Map toMap() => { "singleColumnBrowseResultsRenderer": singleColumnBrowseResultsRenderer?.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; SectionListContinuationContent({ this.musicCarouselShelfRenderer, this.musicTastebuilderShelfRenderer, }); 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"]), ); Map toMap() => { "musicCarouselShelfRenderer": musicCarouselShelfRenderer?.toMap(), "musicTastebuilderShelfRenderer": musicTastebuilderShelfRenderer?.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; MusicResponsiveListItemRendererMenu? menu; PlaylistItemData? playlistItemData; String? flexColumnDisplayStyle; String? itemHeight; MusicResponsiveListItemRenderer({ this.trackingParams, this.thumbnail, this.overlay, this.flexColumns, 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))), 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())), "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; PurpleContent({ this.musicPlayButtonRenderer, }); 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"]), ); Map toMap() => { "musicPlayButtonRenderer": musicPlayButtonRenderer?.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, }; }