Tusker/Packages/ComposeUI/Sources/ComposeUI/Views/AvatarImageView.swift

43 lines
1.1 KiB
Swift

//
// 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")
}
}