// // AvatarImageView.swift // ComposeUI // // Created by Shadowfacts on 3/4/23. // import SwiftUI struct AvatarImageView: View { let url: URL? let size: CGFloat @State private var image: UIImage? @EnvironmentObject private var controller: ComposeController var body: some View { imageView .resizable() .frame(width: size, height: size) .cornerRadius(controller.config.avatarStyle.cornerRadiusFraction * size) .task { if let url { image = await controller.fetchAvatar(url) } } // tell swiftui that this view has changed (and therefore the task needs to re-run) when the url changes .id(url) } private var imageView: Image { if let image { return Image(uiImage: image) } else { return placeholder } } private var placeholder: Image { Image(systemName: controller.config.avatarStyle == .roundRect ? "person.crop.square" : "person.crop.circle") } }