Video.fromMap constructor
Implementation
factory Video.fromMap(Map<String, dynamic>? map) {
List<Thumbnail>? thumbnails;
print("AYAHSUJANA map ===>>> $map");
if (map?.containsKey("richItemRenderer") ?? false) {
//video channel
var uploadDate = map?['richItemRenderer']['content']['videoRenderer']
?['publishedTimeText'];
var lengthText =
map?['richItemRenderer']['content']['videoRenderer']?['lengthText'];
thumbnails = [];
map?['richItemRenderer']['content']['videoRenderer']['thumbnail']
['thumbnails']
.forEach((thumbnail) {
thumbnails!.add(Thumbnail(
url: thumbnail['url'],
width: thumbnail['width'],
height: thumbnail['height']));
});
var viewtext = map?['richItemRenderer']?['content']?['videoRenderer']
?['shortViewCountText']?['runs'];
String? uploadDates;
String? viewers;
if (uploadDate != null) {
uploadDates = uploadDate['simpleText'];
} else {
uploadDates = '';
}
if (viewtext != null) {
viewers = viewtext[0]['text'] + viewtext[1]['text'];
} else {
viewers = map?['richItemRenderer']?['content']?['videoRenderer']
?['shortViewCountText']?['simpleText'];
}
return Video(
videoId: map?['richItemRenderer']['content']['videoRenderer']
?['videoId'] ??
'',
duration: lengthText?['simpleText'] ?? '',
title: map?['richItemRenderer']['content']['videoRenderer']?['title']
?['runs']?[0]?['text'] ??
'',
channelName: '',
thumbnails: thumbnails,
views: viewers ?? '',
uploadDate: uploadDates ?? '',
);
} else if (map?.containsKey("videoRenderer") ?? false) {
//Trending and search videos
var uploadDate = map?['videoRenderer']?['publishedTimeText'];
var lengthText = map?['videoRenderer']?['lengthText'];
var simpleText =
map?['videoRenderer']?['shortViewCountText']?['simpleText'];
thumbnails = [];
map?['videoRenderer']['thumbnail']['thumbnails'].forEach((thumbnail) {
thumbnails!.add(Thumbnail(
url: thumbnail['url'],
width: thumbnail['width'],
height: thumbnail['height']));
});
String? uploadDates;
if (uploadDate != null) {
uploadDates = uploadDate?['simpleText'];
} else {
uploadDates = '';
}
return Video(
videoId: map?['videoRenderer']?['videoId'] ?? '',
duration:
(lengthText == null) ? 'LIVE' : lengthText?['simpleText'] ?? '',
title: map?['videoRenderer']?['title']?['runs']?[0]?['text'] ?? '',
channelName:
map?['videoRenderer']['longBylineText']['runs'][0]['text'] ?? '',
thumbnails: thumbnails,
views: (lengthText == null)
? "Views ${map!['videoRenderer']['viewCountText']['runs'][0]['text']}"
: simpleText,
uploadDate: uploadDates ?? '');
} else if (map?.containsKey("compactVideoRenderer") ?? false) {
//Related videos
String? videoId;
String? title;
String? duration;
thumbnails = [];
String? channelName;
String? views;
String? uploadDates;
videoId = map?['compactVideoRenderer']?['videoId'];
//print("AYAHSUJANA videoId ===>>> $videoId");
title = map?['compactVideoRenderer']?['title']?['simpleText'];
var lengthText = map?['compactVideoRenderer']?['lengthText'];
duration = (lengthText == null) ? 'LIVE' : lengthText?['simpleText'];
map?['compactVideoRenderer']['thumbnail']['thumbnails']
.forEach((thumbnail) {
thumbnails!.add(Thumbnail(
url: thumbnail['url'],
width: thumbnail['width'],
height: thumbnail['height']));
});
channelName = map?['compactVideoRenderer']?['shortBylineText']?['runs']
?[0]?['text'];
var viewtext =
map?['compactVideoRenderer']?['shortViewCountText']?['runs'];
if (viewtext != null) {
views = viewtext?[0]['text'] + viewtext?[1]['text'];
} else {
views =
map?['compactVideoRenderer']?['shortViewCountText']?['simpleText'];
}
var uploadDate = map?['compactVideoRenderer']['publishedTimeText'];
if (uploadDate != null) {
uploadDates = uploadDate?['simpleText'];
} else {
uploadDates = '';
}
// print("AYAHSUJANA videoId ===>>> $videoId");
// print("AYAHSUJANA title ===>>> $title");
// print("AYAHSUJANA duration ===>>> $duration");
// print("AYAHSUJANA thumbnail ===>>> $thumbnails");
// print("AYAHSUJANA channelName ===>>> $channelName");
// print("AYAHSUJANA views ===>>> $views");
// print("AYAHSUJANA uploadDates ===>>> $uploadDates");
// print("AYAHSUJANA ==========================================================");
return Video(
videoId: videoId ?? '',
title: title ?? '',
duration: duration ?? '',
thumbnails: thumbnails,
channelName: channelName ?? '',
views: views ?? '',
uploadDate: uploadDates,
);
} else if (map?.containsKey("gridVideoRenderer") ?? false) {
String? simpleText =
map?['gridVideoRenderer']['shortViewCountText']?['simpleText'];
thumbnails = [];
map?['gridVideoRenderer']['thumbnail']['thumbnails'].forEach((thumbnail) {
thumbnails!.add(Thumbnail(
url: thumbnail['url'],
width: thumbnail['width'],
height: thumbnail['height']));
});
return Video(
videoId: map?['gridVideoRenderer']['videoId'],
title: map?['gridVideoRenderer']['title']['runs'][0]['text'],
duration: map?['gridVideoRenderer']['thumbnailOverlays'][0]
['thumbnailOverlayTimeStatusRenderer']['text']['simpleText'],
thumbnails: thumbnails,
views: (simpleText != null) ? simpleText : "???");
} else if (map?.containsKey("playlistVideoRenderer") ?? false) {
var uploadDate = map?['playlistVideoRenderer']?['publishedTimeText'];
thumbnails = [];
map?['playlistVideoRenderer']['thumbnail']['thumbnails']
.forEach((thumbnail) {
thumbnails!.add(Thumbnail(
url: thumbnail['url'],
width: thumbnail['width'],
height: thumbnail['height']));
});
String? uploadDates;
if (uploadDate != null) {
uploadDates = uploadDate;
} else {
uploadDates = '';
}
return Video(
videoId: map?['playlistVideoRenderer']['videoId'],
title: map?['playlistVideoRenderer']['title']['runs'][0]['text'],
duration: map?['playlistVideoRenderer']['thumbnailOverlays'][0]
['thumbnailOverlayTimeStatusRenderer']['text']['simpleText'],
thumbnails: thumbnails,
views: map?['playlistVideoRenderer']['title']['accessibility']
['accessibilityData']['label'],
uploadDate: uploadDates);
}
return Video();
}