feat(InstanceInfoView): 自动加载实例信息中的 thumbnail image

自动加载实例信息中的 thumbnail image

Signed-off-by: Ching <loooching@gmail.com>
This commit is contained in:
Ching 2023-03-20 23:17:29 +08:00
parent d8ea4236cc
commit 1527be4329

View File

@ -7,15 +7,57 @@
import SwiftUI
class ImageLoader: ObservableObject {
@Published var image: UIImage?
func loadImage(from url: URL) {
URLSession.shared.dataTask(with: url) { data, _, error in
guard let data = data, error == nil else {
return
}
DispatchQueue.main.async {
self.image = UIImage(data: data)
}
}.resume()
}
}
struct InstanceInfoView: View {
// @ObservedObject private var instanceViewModel = InstanceViewModel()
var instance: Instance
@StateObject private var imageLoader = ImageLoader()
var body: some View {
VStack(alignment: .leading) {
Text("实例名称: \(instance.title)")
Text("实例人数: \(instance.userCount != nil ? "\(instance.userCount!)" : "N/A")")
Text("嘟嘟数量: \(instance.statusCount != nil ? "\(instance.statusCount!)" : "N/A")")
Text("缩略图: \(instance.thumbnail?.absoluteString ?? "N/A")")
// TODO: ->
Group {
if let imageURL = instance.thumbnail {
if let image = imageLoader.image {
Image(uiImage: image)
.resizable()
.scaledToFit()
.frame(maxWidth: .infinity)
.onAppear {
imageLoader.loadImage(from: imageURL)
}
} else {
VStack {
Text("缩略图: 加载中...")
ProgressView() //
}
.frame(maxWidth: .infinity)
.onAppear {
imageLoader.loadImage(from: imageURL)
}
}
} else {
Text("缩略图: N/A")
}
}
Text("简介: \(instance.shortDescription ?? "N/A")")
Text("介绍: \(instance.description ?? "N/A")")
}