Skip to content

Instantly share code, notes, and snippets.

// ...
struct SimpleEntry: TimelineEntry {
public let date: Date
public let emojiDetails: EmojiDetails
}
// ...
import Foundation
public struct EmojiProvider {
/// Creates a list of emoji details that includes an emoji along with its name and description.
/// - Returns: The list of `EmojiDetail`s
/// - Note: Emoji descriptions obtained from [Empojipedia](https://emojipedia.org/).
static func all() -> [EmojiDetails] {
// ...
}
// ...
struct Emojibook_WidgetEntryView: View {
var entry: Provider.Entry
var body: some View {
EmojiWidgetView(emojiDetails: entry.emojiDetails)
}
}
@main
struct Emojibook_Widget: Widget {
private let kind: String = "Emojibook_Widget"
public var body: some WidgetConfiguration {
StaticConfiguration(
kind: kind,
provider: Provider(),
placeholder: PlaceholderView()
) { entry in
// ...
@main
struct Emojibook_Widget: Widget {
private let kind: String = "Emojibook_Widget"
public var body: some WidgetConfiguration {
StaticConfiguration(
kind: kind,
provider: Provider(),
// ...
struct MediumEmojiWidgetView: View {
let emojiDetails: EmojiDetails
var body: some View {
ZStack {
Color(UIColor.systemIndigo)
HStack {
// ...
struct MediumEmojiWidgetView: View {
// ...
}
struct LargeEmojiWidgetView: View {
let emojiDetails: EmojiDetails
// ...
struct SmallEmojiWidgetView: View {
let emojiDetails: EmojiDetails
var body: some View {
ZStack {
Color(UIColor.systemIndigo)
VStack {
struct EmojiWidgetView: View {
@Environment(\.widgetFamily) var family: WidgetFamily
let emojiDetails: EmojiDetails
@ViewBuilder
var body: some View {
switch family {
case .systemSmall:
SmallEmojiWidgetView(emojiDetails: emojiDetails)
public struct EmojiDetails {
public let emoji: String
public let name: String
public let description: String
public let url: URL?
init(emoji: String, name: String, description: String) {
self.emoji = emoji
self.name = name
self.description = description