feat(InstanceInfoView): 自动加载实例信息中的 thumbnail image
自动加载实例信息中的 thumbnail image Signed-off-by: Ching <loooching@gmail.com>
This commit is contained in:
parent
d8ea4236cc
commit
1527be4329
@ -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")")
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user