buildHead method
Implementation
@mustCallSuper
Iterable<Component> buildHead(Page page) sync* {
final pageData = page.data.page;
final siteData = page.data.site;
final pageTitle = pageData['title'] ?? siteData['title'];
final pageTitleBase = pageData['titleBase'] ?? siteData['titleBase'];
final title = switch ((pageTitle, pageTitleBase)) {
(final String title, final String base) => '$title | $base',
(final String title, _) => title,
(_, final String base) => base,
_ => '',
};
yield Component.element(tag: 'title', children: [Component.text(title)]);
yield meta(attributes: {'property': 'og:title'}, content: title);
if (siteData['favicon'] case final String faviconHref) {
yield link(rel: 'icon', type: 'image/png', href: faviconHref);
}
final description = pageData['description'];
final keywords = pageData['keywords'];
final image = pageData['image'];
final metaData = pageData['meta'];
if (description case final desc?) {
yield meta(name: 'description', content: desc.toString());
}
if (keywords case final keys?) {
yield meta(name: 'keywords', content: keys is List ? keys.join(', ') : keys.toString());
}
if (metaData case final Map<String, Object?> metaData?) {
for (final MapEntry(key: name, value: content) in metaData.entries) {
yield meta(name: name, content: content as String?);
}
}
if (description case final desc?) {
yield meta(attributes: {'property': 'og:description'}, content: desc.toString());
}
if (image case final img?) {
yield meta(attributes: {'property': 'og:image'}, content: img.toString());
}
if (metaData case final List<Object?> metaData?) {
for (final item in metaData) {
if (item is Map<Object?, Object?>) {
yield meta(attributes: item.cast());
}
}
}
}