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
|
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 {
|
struct InstanceInfoView: View {
|
||||||
// @ObservedObject private var instanceViewModel = InstanceViewModel()
|
// @ObservedObject private var instanceViewModel = InstanceViewModel()
|
||||||
var instance: Instance
|
var instance: Instance
|
||||||
|
@StateObject private var imageLoader = ImageLoader()
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("实例名称: \(instance.title)")
|
Text("实例名称: \(instance.title)")
|
||||||
Text("实例人数: \(instance.userCount != nil ? "\(instance.userCount!)" : "N/A")")
|
Text("实例人数: \(instance.userCount != nil ? "\(instance.userCount!)" : "N/A")")
|
||||||
Text("嘟嘟数量: \(instance.statusCount != nil ? "\(instance.statusCount!)" : "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.shortDescription ?? "N/A")")
|
||||||
Text("介绍: \(instance.description ?? "N/A")")
|
Text("介绍: \(instance.description ?? "N/A")")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user