43 lines
1.1 KiB
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")
|
|
}
|
|
}
|