4466 lines
138 KiB
Dart
4466 lines
138 KiB
Dart
// 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => ThumbnailClass(
|
|
musicThumbnailRenderer: json["musicThumbnailRenderer"] == null ? null : MusicThumbnailRenderer.fromMap(json["musicThumbnailRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicThumbnailRenderer(
|
|
thumbnail: json["thumbnail"] == null ? null : MusicThumbnailRendererThumbnail.fromMap(json["thumbnail"]),
|
|
thumbnailCrop: json["thumbnailCrop"],
|
|
thumbnailScale: json["thumbnailScale"],
|
|
trackingParams: json["trackingParams"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"thumbnail": thumbnail?.toMap(),
|
|
"thumbnailCrop": thumbnailCrop,
|
|
"thumbnailScale": thumbnailScale,
|
|
"trackingParams": trackingParams,
|
|
};
|
|
}
|
|
|
|
class MusicThumbnailRendererThumbnail {
|
|
List<ThumbnailElement>? thumbnails;
|
|
|
|
MusicThumbnailRendererThumbnail({
|
|
this.thumbnails,
|
|
});
|
|
|
|
factory MusicThumbnailRendererThumbnail.fromJson(String str) => MusicThumbnailRendererThumbnail.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory MusicThumbnailRendererThumbnail.fromMap(Map<String, dynamic> json) => MusicThumbnailRendererThumbnail(
|
|
thumbnails: json["thumbnails"] == null ? [] : List<ThumbnailElement>.from(json["thumbnails"]!.map((x) => ThumbnailElement.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"thumbnails": thumbnails == null ? [] : List<dynamic>.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<String, dynamic> json) => ThumbnailElement(
|
|
url: json["url"],
|
|
width: json["width"],
|
|
height: json["height"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Contents(
|
|
singleColumnBrowseResultsRenderer: json["singleColumnBrowseResultsRenderer"] == null ? null : SingleColumnBrowseResultsRenderer.fromMap(json["singleColumnBrowseResultsRenderer"]),
|
|
twoColumnBrowseResultsRenderer: json["twoColumnBrowseResultsRenderer"] == null ? null : TwoColumnBrowseResultsRenderer.fromMap(json["twoColumnBrowseResultsRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"singleColumnBrowseResultsRenderer": singleColumnBrowseResultsRenderer?.toMap(),
|
|
"twoColumnBrowseResultsRenderer": twoColumnBrowseResultsRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class SingleColumnBrowseResultsRenderer {
|
|
List<Tab>? tabs;
|
|
|
|
SingleColumnBrowseResultsRenderer({
|
|
this.tabs,
|
|
});
|
|
|
|
factory SingleColumnBrowseResultsRenderer.fromJson(String str) => SingleColumnBrowseResultsRenderer.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory SingleColumnBrowseResultsRenderer.fromMap(Map<String, dynamic> json) => SingleColumnBrowseResultsRenderer(
|
|
tabs: json["tabs"] == null ? [] : List<Tab>.from(json["tabs"]!.map((x) => Tab.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"tabs": tabs == null ? [] : List<dynamic>.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<String, dynamic> json) => Tab(
|
|
tabRenderer: json["tabRenderer"] == null ? null : TabRenderer.fromMap(json["tabRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => TabRendererContent(
|
|
sectionListRenderer: json["sectionListRenderer"] == null ? null : SectionList.fromMap(json["sectionListRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"sectionListRenderer": sectionListRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class SectionList {
|
|
List<SectionListContinuationContent>? contents;
|
|
List<Continuation>? 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<String, dynamic> json) => SectionList(
|
|
contents: json["contents"] == null ? [] : List<SectionListContinuationContent>.from(json["contents"]!.map((x) => SectionListContinuationContent.fromMap(x))),
|
|
continuations: json["continuations"] == null ? [] : List<Continuation>.from(json["continuations"]!.map((x) => Continuation.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
header: json["header"] == null ? null : SectionListContinuationHeader.fromMap(json["header"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"contents": contents == null ? [] : List<dynamic>.from(contents!.map((x) => x.toMap())),
|
|
"continuations": continuations == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> toMap() => {
|
|
"musicCarouselShelfRenderer": musicCarouselShelfRenderer?.toMap(),
|
|
"musicTastebuilderShelfRenderer": musicTastebuilderShelfRenderer?.toMap(),
|
|
"musicResponsiveHeaderRenderer": musicResponsiveHeaderRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class MusicCarouselShelfRenderer {
|
|
MusicCarouselShelfRendererHeader? header;
|
|
List<MusicCarouselShelfRendererContent>? 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<String, dynamic> json) => MusicCarouselShelfRenderer(
|
|
header: json["header"] == null ? null : MusicCarouselShelfRendererHeader.fromMap(json["header"]),
|
|
contents: json["contents"] == null ? [] : List<MusicCarouselShelfRendererContent>.from(json["contents"]!.map((x) => MusicCarouselShelfRendererContent.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
itemSize: json["itemSize"],
|
|
numItemsPerColumn: json["numItemsPerColumn"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"header": header?.toMap(),
|
|
"contents": contents == null ? [] : List<dynamic>.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<String, dynamic> json) => MusicCarouselShelfRendererContent(
|
|
musicResponsiveListItemRenderer: json["musicResponsiveListItemRenderer"] == null ? null : MusicResponsiveListItemRenderer.fromMap(json["musicResponsiveListItemRenderer"]),
|
|
musicTwoRowItemRenderer: json["musicTwoRowItemRenderer"] == null ? null : MusicTwoRowItemRenderer.fromMap(json["musicTwoRowItemRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"musicResponsiveListItemRenderer": musicResponsiveListItemRenderer?.toMap(),
|
|
"musicTwoRowItemRenderer": musicTwoRowItemRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class MusicResponsiveListItemRenderer {
|
|
String? trackingParams;
|
|
ThumbnailClass? thumbnail;
|
|
Overlay? overlay;
|
|
List<FlexColumn>? flexColumns;
|
|
List<FixedColumn>? 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<String, dynamic> 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<FlexColumn>.from(json["flexColumns"]!.map((x) => FlexColumn.fromMap(x))),
|
|
fixedColumns: json["fixedColumns"] == null ? [] : List<FixedColumn>.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<String, dynamic> toMap() => {
|
|
"trackingParams": trackingParams,
|
|
"thumbnail": thumbnail?.toMap(),
|
|
"overlay": overlay?.toMap(),
|
|
"flexColumns": flexColumns == null ? [] : List<dynamic>.from(flexColumns!.map((x) => x.toMap())),
|
|
"fixedColumns": fixedColumns == null ? [] : List<dynamic>.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<String, dynamic> json) => FlexColumn(
|
|
musicResponsiveListItemFlexColumnRenderer: json["musicResponsiveListItemFlexColumnRenderer"] == null ? null : MusicResponsiveListItemFlexColumnRenderer.fromMap(json["musicResponsiveListItemFlexColumnRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicResponsiveListItemFlexColumnRenderer(
|
|
text: json["text"] == null ? null : Text.fromMap(json["text"]),
|
|
displayPriority: json["displayPriority"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"text": text?.toMap(),
|
|
"displayPriority": displayPriority,
|
|
};
|
|
}
|
|
|
|
class Text {
|
|
List<PurpleRun>? runs;
|
|
|
|
Text({
|
|
this.runs,
|
|
});
|
|
|
|
factory Text.fromJson(String str) => Text.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory Text.fromMap(Map<String, dynamic> json) => Text(
|
|
runs: json["runs"] == null ? [] : List<PurpleRun>.from(json["runs"]!.map((x) => PurpleRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => PurpleRun(
|
|
text: json["text"],
|
|
navigationEndpoint: json["navigationEndpoint"] == null ? null : PurpleNavigationEndpoint.fromMap(json["navigationEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => PurpleNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
watchEndpoint: json["watchEndpoint"] == null ? null : NavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]),
|
|
browseEndpoint: json["browseEndpoint"] == null ? null : PurpleBrowseEndpoint.fromMap(json["browseEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => PurpleBrowseEndpoint(
|
|
browseId: json["browseId"],
|
|
params: json["params"],
|
|
browseEndpointContextSupportedConfigs: json["browseEndpointContextSupportedConfigs"] == null ? null : BrowseEndpointContextSupportedConfigs.fromMap(json["browseEndpointContextSupportedConfigs"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => BrowseEndpointContextSupportedConfigs(
|
|
browseEndpointContextMusicConfig: json["browseEndpointContextMusicConfig"] == null ? null : BrowseEndpointContextMusicConfig.fromMap(json["browseEndpointContextMusicConfig"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => BrowseEndpointContextMusicConfig(
|
|
pageType: json["pageType"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => LoggingContext(
|
|
vssLoggingContext: json["vssLoggingContext"] == null ? null : VssLoggingContext.fromMap(json["vssLoggingContext"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => VssLoggingContext(
|
|
serializedContextData: json["serializedContextData"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => WatchEndpointMusicSupportedConfigs(
|
|
watchEndpointMusicConfig: json["watchEndpointMusicConfig"] == null ? null : WatchEndpointMusicConfig.fromMap(json["watchEndpointMusicConfig"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => WatchEndpointMusicConfig(
|
|
musicVideoType: json["musicVideoType"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicResponsiveListItemRendererMenu(
|
|
menuRenderer: json["menuRenderer"] == null ? null : PurpleMenuRenderer.fromMap(json["menuRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"menuRenderer": menuRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class PurpleMenuRenderer {
|
|
List<PurpleItem>? items;
|
|
String? trackingParams;
|
|
List<TopLevelButton>? 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<String, dynamic> json) => PurpleMenuRenderer(
|
|
items: json["items"] == null ? [] : List<PurpleItem>.from(json["items"]!.map((x) => PurpleItem.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
topLevelButtons: json["topLevelButtons"] == null ? [] : List<TopLevelButton>.from(json["topLevelButtons"]!.map((x) => TopLevelButton.fromMap(x))),
|
|
accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"items": items == null ? [] : List<dynamic>.from(items!.map((x) => x.toMap())),
|
|
"trackingParams": trackingParams,
|
|
"topLevelButtons": topLevelButtons == null ? [] : List<dynamic>.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<String, dynamic> json) => Accessibility(
|
|
accessibilityData: json["accessibilityData"] == null ? null : AccessibilityData.fromMap(json["accessibilityData"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => AccessibilityData(
|
|
label: json["label"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => Icon(
|
|
iconType: json["iconType"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => ModalEndpoint(
|
|
modal: json["modal"] == null ? null : Modal.fromMap(json["modal"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Modal(
|
|
modalWithTitleAndButtonRenderer: json["modalWithTitleAndButtonRenderer"] == null ? null : ModalWithTitleAndButtonRenderer.fromMap(json["modalWithTitleAndButtonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => Button(
|
|
buttonRenderer: json["buttonRenderer"] == null ? null : ButtonButtonRenderer.fromMap(json["buttonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => FluffyNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
signInEndpoint: json["signInEndpoint"] == null ? null : SignInEndpoint.fromMap(json["signInEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => SignInEndpoint(
|
|
hack: json["hack"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"hack": hack,
|
|
};
|
|
}
|
|
|
|
class PrimaryText {
|
|
List<PrimaryTextRun>? runs;
|
|
|
|
PrimaryText({
|
|
this.runs,
|
|
});
|
|
|
|
factory PrimaryText.fromJson(String str) => PrimaryText.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory PrimaryText.fromMap(Map<String, dynamic> json) => PrimaryText(
|
|
runs: json["runs"] == null ? [] : List<PrimaryTextRun>.from(json["runs"]!.map((x) => PrimaryTextRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => PrimaryTextRun(
|
|
text: json["text"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => ShareEntityEndpoint(
|
|
serializedShareEntity: json["serializedShareEntity"],
|
|
sharePanelType: json["sharePanelType"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => WatchPlaylistEndpoint(
|
|
playlistId: json["playlistId"],
|
|
params: json["params"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => ServiceEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
queueAddEndpoint: json["queueAddEndpoint"] == null ? null : QueueAddEndpoint.fromMap(json["queueAddEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"clickTrackingParams": clickTrackingParams,
|
|
"queueAddEndpoint": queueAddEndpoint?.toMap(),
|
|
};
|
|
}
|
|
|
|
class QueueAddEndpoint {
|
|
QueueTarget? queueTarget;
|
|
String? queueInsertPosition;
|
|
List<Command>? 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<String, dynamic> json) => QueueAddEndpoint(
|
|
queueTarget: json["queueTarget"] == null ? null : QueueTarget.fromMap(json["queueTarget"]),
|
|
queueInsertPosition: json["queueInsertPosition"],
|
|
commands: json["commands"] == null ? [] : List<Command>.from(json["commands"]!.map((x) => Command.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"queueTarget": queueTarget?.toMap(),
|
|
"queueInsertPosition": queueInsertPosition,
|
|
"commands": commands == null ? [] : List<dynamic>.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<String, dynamic> json) => Command(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
addToToastAction: json["addToToastAction"] == null ? null : AddToToastAction.fromMap(json["addToToastAction"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => AddToToastAction(
|
|
item: json["item"] == null ? null : AddToToastActionItem.fromMap(json["item"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => AddToToastActionItem(
|
|
notificationTextRenderer: json["notificationTextRenderer"] == null ? null : NotificationTextRenderer.fromMap(json["notificationTextRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => NotificationTextRenderer(
|
|
successResponseText: json["successResponseText"] == null ? null : PrimaryText.fromMap(json["successResponseText"]),
|
|
trackingParams: json["trackingParams"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => QueueTarget(
|
|
videoId: json["videoId"],
|
|
onEmptyQueue: json["onEmptyQueue"] == null ? null : OnEmptyQueue.fromMap(json["onEmptyQueue"]),
|
|
playlistId: json["playlistId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => OnEmptyQueue(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
watchEndpoint: json["watchEndpoint"] == null ? null : OnEmptyQueueWatchEndpoint.fromMap(json["watchEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => OnEmptyQueueWatchEndpoint(
|
|
videoId: json["videoId"],
|
|
playlistId: json["playlistId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => DefaultServiceEndpointClass(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
modalEndpoint: json["modalEndpoint"] == null ? null : ModalEndpoint.fromMap(json["modalEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => PurpleToggledServiceEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
feedbackEndpoint: json["feedbackEndpoint"] == null ? null : FeedbackEndpoint.fromMap(json["feedbackEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => FeedbackEndpoint(
|
|
feedbackToken: json["feedbackToken"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => TopLevelButton(
|
|
likeButtonRenderer: json["likeButtonRenderer"] == null ? null : LikeButtonRenderer.fromMap(json["likeButtonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => PlaylistItemData(
|
|
videoId: json["videoId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Overlay(
|
|
musicItemThumbnailOverlayRenderer: json["musicItemThumbnailOverlayRenderer"] == null ? null : OverlayMusicItemThumbnailOverlayRenderer.fromMap(json["musicItemThumbnailOverlayRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => MusicItemThumbnailOverlayRendererBackground(
|
|
verticalGradient: json["verticalGradient"] == null ? null : VerticalGradient.fromMap(json["verticalGradient"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"verticalGradient": verticalGradient?.toMap(),
|
|
};
|
|
}
|
|
|
|
class VerticalGradient {
|
|
List<String>? gradientLayerColors;
|
|
|
|
VerticalGradient({
|
|
this.gradientLayerColors,
|
|
});
|
|
|
|
factory VerticalGradient.fromJson(String str) => VerticalGradient.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory VerticalGradient.fromMap(Map<String, dynamic> json) => VerticalGradient(
|
|
gradientLayerColors: json["gradientLayerColors"] == null ? [] : List<String>.from(json["gradientLayerColors"]!.map((x) => x)),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"gradientLayerColors": gradientLayerColors == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => PurplePlayNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
watchEndpoint: json["watchEndpoint"] == null ? null : NavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => MusicTwoRowItemRendererMenu(
|
|
menuRenderer: json["menuRenderer"] == null ? null : FluffyMenuRenderer.fromMap(json["menuRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"menuRenderer": menuRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class FluffyMenuRenderer {
|
|
List<FluffyItem>? 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<String, dynamic> json) => FluffyMenuRenderer(
|
|
items: json["items"] == null ? [] : List<FluffyItem>.from(json["items"]!.map((x) => FluffyItem.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"items": items == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => FluffyToggledServiceEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
likeEndpoint: json["likeEndpoint"] == null ? null : LikeEndpoint.fromMap(json["likeEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => LikeEndpoint(
|
|
status: json["status"],
|
|
target: json["target"] == null ? null : TargetClass.fromMap(json["target"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => TargetClass(
|
|
playlistId: json["playlistId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicTwoRowItemRendererNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
browseEndpoint: json["browseEndpoint"] == null ? null : FluffyBrowseEndpoint.fromMap(json["browseEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => FluffyBrowseEndpoint(
|
|
browseId: json["browseId"],
|
|
params: json["params"],
|
|
browseEndpointContextSupportedConfigs: json["browseEndpointContextSupportedConfigs"] == null ? null : BrowseEndpointContextSupportedConfigs.fromMap(json["browseEndpointContextSupportedConfigs"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"browseId": browseId,
|
|
"params": params,
|
|
"browseEndpointContextSupportedConfigs": browseEndpointContextSupportedConfigs?.toMap(),
|
|
};
|
|
}
|
|
|
|
class Subtitle {
|
|
List<SubtitleRun>? runs;
|
|
|
|
Subtitle({
|
|
this.runs,
|
|
});
|
|
|
|
factory Subtitle.fromJson(String str) => Subtitle.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory Subtitle.fromMap(Map<String, dynamic> json) => Subtitle(
|
|
runs: json["runs"] == null ? [] : List<SubtitleRun>.from(json["runs"]!.map((x) => SubtitleRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => SubtitleRun(
|
|
text: json["text"],
|
|
navigationEndpoint: json["navigationEndpoint"] == null ? null : TentacledNavigationEndpoint.fromMap(json["navigationEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => TentacledNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
browseEndpoint: json["browseEndpoint"] == null ? null : PurpleBrowseEndpoint.fromMap(json["browseEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => ThumbnailOverlay(
|
|
musicItemThumbnailOverlayRenderer: json["musicItemThumbnailOverlayRenderer"] == null ? null : ThumbnailOverlayMusicItemThumbnailOverlayRenderer.fromMap(json["musicItemThumbnailOverlayRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => FluffyContent(
|
|
musicPlayButtonRenderer: json["musicPlayButtonRenderer"] == null ? null : FluffyMusicPlayButtonRenderer.fromMap(json["musicPlayButtonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => FluffyPlayNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
watchPlaylistEndpoint: json["watchPlaylistEndpoint"] == null ? null : TargetClass.fromMap(json["watchPlaylistEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"clickTrackingParams": clickTrackingParams,
|
|
"watchPlaylistEndpoint": watchPlaylistEndpoint?.toMap(),
|
|
};
|
|
}
|
|
|
|
class Title {
|
|
List<FluffyRun>? runs;
|
|
|
|
Title({
|
|
this.runs,
|
|
});
|
|
|
|
factory Title.fromJson(String str) => Title.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory Title.fromMap(Map<String, dynamic> json) => Title(
|
|
runs: json["runs"] == null ? [] : List<FluffyRun>.from(json["runs"]!.map((x) => FluffyRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => FluffyRun(
|
|
text: json["text"],
|
|
navigationEndpoint: json["navigationEndpoint"] == null ? null : MusicTwoRowItemRendererNavigationEndpoint.fromMap(json["navigationEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicCarouselShelfRendererHeader(
|
|
musicCarouselShelfBasicHeaderRenderer: json["musicCarouselShelfBasicHeaderRenderer"] == null ? null : MusicCarouselShelfBasicHeaderRenderer.fromMap(json["musicCarouselShelfBasicHeaderRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => MoreContentButton(
|
|
buttonRenderer: json["buttonRenderer"] == null ? null : MoreContentButtonButtonRenderer.fromMap(json["buttonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => StickyNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
watchPlaylistEndpoint: json["watchPlaylistEndpoint"] == null ? null : WatchPlaylistEndpoint.fromMap(json["watchPlaylistEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => ActionButton(
|
|
buttonRenderer: json["buttonRenderer"] == null ? null : ActionButtonButtonRenderer.fromMap(json["buttonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => MusicTastebuilderShelfRendererThumbnail(
|
|
musicTastebuilderShelfThumbnailRenderer: json["musicTastebuilderShelfThumbnailRenderer"] == null ? null : MusicTastebuilderShelfThumbnailRenderer.fromMap(json["musicTastebuilderShelfThumbnailRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicTastebuilderShelfThumbnailRenderer(
|
|
thumbnail: json["thumbnail"] == null ? null : MusicThumbnailRendererThumbnail.fromMap(json["thumbnail"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Continuation(
|
|
nextContinuationData: json["nextContinuationData"] == null ? null : NextContinuationData.fromMap(json["nextContinuationData"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => NextContinuationData(
|
|
continuation: json["continuation"],
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => SectionListContinuationHeader(
|
|
chipCloudRenderer: json["chipCloudRenderer"] == null ? null : ChipCloudRenderer.fromMap(json["chipCloudRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"chipCloudRenderer": chipCloudRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class ChipCloudRenderer {
|
|
List<Chip>? 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<String, dynamic> json) => ChipCloudRenderer(
|
|
chips: json["chips"] == null ? [] : List<Chip>.from(json["chips"]!.map((x) => Chip.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
horizontalScrollable: json["horizontalScrollable"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"chips": chips == null ? [] : List<dynamic>.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<String, dynamic> json) => Chip(
|
|
chipCloudChipRenderer: json["chipCloudChipRenderer"] == null ? null : ChipCloudChipRenderer.fromMap(json["chipCloudChipRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => OnDeselectedCommandClass(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
browseEndpoint: json["browseEndpoint"] == null ? null : OnDeselectedCommandBrowseEndpoint.fromMap(json["browseEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => OnDeselectedCommandBrowseEndpoint(
|
|
browseId: json["browseId"],
|
|
params: json["params"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Style(
|
|
styleType: json["styleType"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Endpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
browseEndpoint: json["browseEndpoint"] == null ? null : EndpointBrowseEndpoint.fromMap(json["browseEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => EndpointBrowseEndpoint(
|
|
browseId: json["browseId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => ContinuationContents(
|
|
sectionListContinuation: json["sectionListContinuation"] == null ? null : SectionList.fromMap(json["sectionListContinuation"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"sectionListContinuation": sectionListContinuation?.toMap(),
|
|
};
|
|
}
|
|
|
|
class ResponseContext {
|
|
String? visitorData;
|
|
List<ServiceTrackingParam>? 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<String, dynamic> json) => ResponseContext(
|
|
visitorData: json["visitorData"],
|
|
serviceTrackingParams: json["serviceTrackingParams"] == null ? [] : List<ServiceTrackingParam>.from(json["serviceTrackingParams"]!.map((x) => ServiceTrackingParam.fromMap(x))),
|
|
maxAgeSeconds: json["maxAgeSeconds"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"visitorData": visitorData,
|
|
"serviceTrackingParams": serviceTrackingParams == null ? [] : List<dynamic>.from(serviceTrackingParams!.map((x) => x.toMap())),
|
|
"maxAgeSeconds": maxAgeSeconds,
|
|
};
|
|
}
|
|
|
|
class ServiceTrackingParam {
|
|
String? service;
|
|
List<Param>? 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<String, dynamic> json) => ServiceTrackingParam(
|
|
service: json["service"],
|
|
params: json["params"] == null ? [] : List<Param>.from(json["params"]!.map((x) => Param.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"service": service,
|
|
"params": params == null ? [] : List<dynamic>.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<String, dynamic> json) => Param(
|
|
key: json["key"],
|
|
value: json["value"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"key": key,
|
|
"value": value,
|
|
};
|
|
}
|
|
|
|
class TwoColumnBrowseResultsRenderer {
|
|
SecondaryContents? secondaryContents;
|
|
List<Tab>? 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<String, dynamic> json) => TwoColumnBrowseResultsRenderer(
|
|
secondaryContents: json["secondaryContents"] == null ? null : SecondaryContents.fromMap(json["secondaryContents"]),
|
|
tabs: json["tabs"] == null ? [] : List<Tab>.from(json["tabs"]!.map((x) => Tab.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"secondaryContents": secondaryContents?.toMap(),
|
|
"tabs": tabs == null ? [] : List<dynamic>.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<String, dynamic> json) => SecondaryContents(
|
|
sectionListRenderer: json["sectionListRenderer"] == null ? null : SecondaryContentsSectionListRenderer.fromMap(json["sectionListRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"sectionListRenderer": sectionListRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class SecondaryContentsSectionListRenderer {
|
|
List<PurpleContent>? 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<String, dynamic> json) => SecondaryContentsSectionListRenderer(
|
|
contents: json["contents"] == null ? [] : List<PurpleContent>.from(json["contents"]!.map((x) => PurpleContent.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"contents": contents == null ? [] : List<dynamic>.from(contents!.map((x) => x.toMap())),
|
|
"trackingParams": trackingParams,
|
|
};
|
|
}
|
|
|
|
class MusicShelfRenderer {
|
|
List<MusicShelfRendererContent>? 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<String, dynamic> json) => MusicShelfRenderer(
|
|
contents: json["contents"] == null ? [] : List<MusicShelfRendererContent>.from(json["contents"]!.map((x) => MusicShelfRendererContent.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
shelfDivider: json["shelfDivider"] == null ? null : ShelfDivider.fromMap(json["shelfDivider"]),
|
|
contentsMultiSelectable: json["contentsMultiSelectable"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"contents": contents == null ? [] : List<dynamic>.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<String, dynamic> json) => MusicShelfRendererContent(
|
|
musicResponsiveListItemRenderer: json["musicResponsiveListItemRenderer"] == null ? null : MusicResponsiveListItemRenderer.fromMap(json["musicResponsiveListItemRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => FixedColumn(
|
|
musicResponsiveListItemFixedColumnRenderer: json["musicResponsiveListItemFixedColumnRenderer"] == null ? null : MusicResponsiveListItemFixedColumnRenderer.fromMap(json["musicResponsiveListItemFixedColumnRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicResponsiveListItemFixedColumnRenderer(
|
|
text: json["text"] == null ? null : Index.fromMap(json["text"]),
|
|
displayPriority: json["displayPriority"],
|
|
size: json["size"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"text": text?.toMap(),
|
|
"displayPriority": displayPriority,
|
|
"size": size,
|
|
};
|
|
}
|
|
|
|
class Index {
|
|
List<IndexRun>? runs;
|
|
|
|
Index({
|
|
this.runs,
|
|
});
|
|
|
|
factory Index.fromJson(String str) => Index.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory Index.fromMap(Map<String, dynamic> json) => Index(
|
|
runs: json["runs"] == null ? [] : List<IndexRun>.from(json["runs"]!.map((x) => IndexRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => IndexRun(
|
|
text: json["text"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => NavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
watchEndpoint: json["watchEndpoint"] == null ? null : PlayNavigationEndpointWatchEndpoint.fromMap(json["watchEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => Menu(
|
|
menuRenderer: json["menuRenderer"] == null ? null : MenuMenuRenderer.fromMap(json["menuRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"menuRenderer": menuRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class MenuMenuRenderer {
|
|
List<PurpleItem>? items;
|
|
String? trackingParams;
|
|
List<TopLevelButton>? 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<String, dynamic> json) => MenuMenuRenderer(
|
|
items: json["items"] == null ? [] : List<PurpleItem>.from(json["items"]!.map((x) => PurpleItem.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
topLevelButtons: json["topLevelButtons"] == null ? [] : List<TopLevelButton>.from(json["topLevelButtons"]!.map((x) => TopLevelButton.fromMap(x))),
|
|
accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"items": items == null ? [] : List<dynamic>.from(items!.map((x) => x.toMap())),
|
|
"trackingParams": trackingParams,
|
|
"topLevelButtons": topLevelButtons == null ? [] : List<dynamic>.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<String, dynamic> json) => BrowseEndpoint(
|
|
browseId: json["browseId"],
|
|
browseEndpointContextSupportedConfigs: json["browseEndpointContextSupportedConfigs"] == null ? null : BrowseEndpointContextSupportedConfigs.fromMap(json["browseEndpointContextSupportedConfigs"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => ModalWithTitleAndButtonRendererButton(
|
|
buttonRenderer: json["buttonRenderer"] == null ? null : ButtonRenderer.fromMap(json["buttonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => ButtonRendererNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
signInEndpoint: json["signInEndpoint"] == null ? null : SignInEndpoint.fromMap(json["signInEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => DefaultNavigationEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
modalEndpoint: json["modalEndpoint"] == null ? null : ModalEndpoint.fromMap(json["modalEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => LikeButtonRendererTarget(
|
|
videoId: json["videoId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MultiSelectCheckbox(
|
|
checkboxRenderer: json["checkboxRenderer"] == null ? null : CheckboxRenderer.fromMap(json["checkboxRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => CheckboxRenderer(
|
|
onSelectionChangeCommand: json["onSelectionChangeCommand"] == null ? null : OnSelectionChangeCommand.fromMap(json["onSelectionChangeCommand"]),
|
|
checkedState: json["checkedState"],
|
|
trackingParams: json["trackingParams"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => OnSelectionChangeCommand(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
updateMultiSelectStateCommand: json["updateMultiSelectStateCommand"] == null ? null : UpdateMultiSelectStateCommand.fromMap(json["updateMultiSelectStateCommand"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => UpdateMultiSelectStateCommand(
|
|
multiSelectParams: json["multiSelectParams"],
|
|
multiSelectItem: json["multiSelectItem"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => Background(
|
|
verticalGradient: json["verticalGradient"] == null ? null : VerticalGradient.fromMap(json["verticalGradient"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicItemThumbnailOverlayRendererContent(
|
|
musicPlayButtonRenderer: json["musicPlayButtonRenderer"] == null ? null : ContentMusicPlayButtonRenderer.fromMap(json["musicPlayButtonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => ShelfDivider(
|
|
musicShelfDividerRenderer: json["musicShelfDividerRenderer"] == null ? null : MusicShelfDividerRenderer.fromMap(json["musicShelfDividerRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MusicShelfDividerRenderer(
|
|
hidden: json["hidden"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"hidden": hidden,
|
|
};
|
|
}
|
|
|
|
class ContentSectionListRenderer {
|
|
List<FluffyContent>? 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<String, dynamic> json) => ContentSectionListRenderer(
|
|
contents: json["contents"] == null ? [] : List<FluffyContent>.from(json["contents"]!.map((x) => FluffyContent.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"contents": contents == null ? [] : List<dynamic>.from(contents!.map((x) => x.toMap())),
|
|
"trackingParams": trackingParams,
|
|
};
|
|
}
|
|
|
|
class MusicResponsiveHeaderRenderer {
|
|
StraplineThumbnailClass? thumbnail;
|
|
List<ButtonElement>? 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<String, dynamic> json) => MusicResponsiveHeaderRenderer(
|
|
thumbnail: json["thumbnail"] == null ? null : StraplineThumbnailClass.fromMap(json["thumbnail"]),
|
|
buttons: json["buttons"] == null ? [] : List<ButtonElement>.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<String, dynamic> toMap() => {
|
|
"thumbnail": thumbnail?.toMap(),
|
|
"buttons": buttons == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> toMap() => {
|
|
"toggleButtonRenderer": toggleButtonRenderer?.toMap(),
|
|
"musicPlayButtonRenderer": musicPlayButtonRenderer?.toMap(),
|
|
"menuRenderer": menuRenderer?.toMap(),
|
|
};
|
|
}
|
|
|
|
class ButtonMenuRenderer {
|
|
List<FluffyItem>? 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<String, dynamic> json) => ButtonMenuRenderer(
|
|
items: json["items"] == null ? [] : List<FluffyItem>.from(json["items"]!.map((x) => FluffyItem.fromMap(x))),
|
|
trackingParams: json["trackingParams"],
|
|
accessibility: json["accessibility"] == null ? null : Accessibility.fromMap(json["accessibility"]),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"items": items == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => ToggledServiceEndpoint(
|
|
clickTrackingParams: json["clickTrackingParams"],
|
|
likeEndpoint: json["likeEndpoint"] == null ? null : LikeEndpoint.fromMap(json["likeEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => LikeEndpointTarget(
|
|
playlistId: json["playlistId"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => MusicResponsiveHeaderRendererDescription(
|
|
musicDescriptionShelfRenderer: json["musicDescriptionShelfRenderer"] == null ? null : MusicDescriptionShelfRenderer.fromMap(json["musicDescriptionShelfRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> toMap() => {
|
|
"description": description?.toMap(),
|
|
"moreButton": moreButton?.toMap(),
|
|
"trackingParams": trackingParams,
|
|
"shelfStyle": shelfStyle,
|
|
};
|
|
}
|
|
|
|
class MusicDescriptionShelfRendererDescription {
|
|
List<DescriptionRun>? runs;
|
|
|
|
MusicDescriptionShelfRendererDescription({
|
|
this.runs,
|
|
});
|
|
|
|
factory MusicDescriptionShelfRendererDescription.fromJson(String str) => MusicDescriptionShelfRendererDescription.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory MusicDescriptionShelfRendererDescription.fromMap(Map<String, dynamic> json) => MusicDescriptionShelfRendererDescription(
|
|
runs: json["runs"] == null ? [] : List<DescriptionRun>.from(json["runs"]!.map((x) => DescriptionRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => DescriptionRun(
|
|
text: json["text"],
|
|
navigationEndpoint: json["navigationEndpoint"] == null ? null : PurpleNavigationEndpoint.fromMap(json["navigationEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => UrlEndpoint(
|
|
url: json["url"],
|
|
target: json["target"],
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MoreButton(
|
|
toggleButtonRenderer: json["toggleButtonRenderer"] == null ? null : MoreButtonToggleButtonRenderer.fromMap(json["toggleButtonRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> toMap() => {
|
|
"isToggled": isToggled,
|
|
"isDisabled": isDisabled,
|
|
"defaultIcon": defaultIcon?.toMap(),
|
|
"defaultText": defaultText?.toMap(),
|
|
"toggledIcon": toggledIcon?.toMap(),
|
|
"toggledText": toggledText?.toMap(),
|
|
"trackingParams": trackingParams,
|
|
};
|
|
}
|
|
|
|
class StraplineTextOne {
|
|
List<StraplineTextOneRun>? runs;
|
|
|
|
StraplineTextOne({
|
|
this.runs,
|
|
});
|
|
|
|
factory StraplineTextOne.fromJson(String str) => StraplineTextOne.fromMap(json.decode(str));
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory StraplineTextOne.fromMap(Map<String, dynamic> json) => StraplineTextOne(
|
|
runs: json["runs"] == null ? [] : List<StraplineTextOneRun>.from(json["runs"]!.map((x) => StraplineTextOneRun.fromMap(x))),
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"runs": runs == null ? [] : List<dynamic>.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<String, dynamic> json) => StraplineTextOneRun(
|
|
text: json["text"],
|
|
navigationEndpoint: json["navigationEndpoint"] == null ? null : FluffyNavigationEndpoint.fromMap(json["navigationEndpoint"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => StraplineThumbnailClass(
|
|
musicThumbnailRenderer: json["musicThumbnailRenderer"] == null ? null : MusicThumbnailRenderer.fromMap(json["musicThumbnailRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => Microformat(
|
|
microformatDataRenderer: json["microformatDataRenderer"] == null ? null : MicroformatDataRenderer.fromMap(json["microformatDataRenderer"]),
|
|
);
|
|
|
|
Map<String, dynamic> 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<String, dynamic> json) => MicroformatDataRenderer(
|
|
urlCanonical: json["urlCanonical"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"urlCanonical": urlCanonical,
|
|
};
|
|
}
|
|
|
|
class MusicPlaylistShelfRenderer {
|
|
String? playlistId;
|
|
List<MusicShelfRendererContent>? 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<String, dynamic> json) => MusicPlaylistShelfRenderer(
|
|
playlistId: json["playlistId"],
|
|
contents: json["contents"] == null ? [] : List<MusicShelfRendererContent>.from(json["contents"]!.map((x) => MusicShelfRendererContent.fromMap(x))),
|
|
collapsedItemCount: json["collapsedItemCount"],
|
|
trackingParams: json["trackingParams"],
|
|
contentsMultiSelectable: json["contentsMultiSelectable"],
|
|
);
|
|
|
|
Map<String, dynamic> toMap() => {
|
|
"playlistId": playlistId,
|
|
"contents": contents == null ? [] : List<dynamic>.from(contents!.map((x) => x.toMap())),
|
|
"collapsedItemCount": collapsedItemCount,
|
|
"trackingParams": trackingParams,
|
|
"contentsMultiSelectable": contentsMultiSelectable,
|
|
};
|
|
} |