diff --git a/DUDUJI/Views/InstanceInfoView.swift b/DUDUJI/Views/InstanceInfoView.swift index 854f83f..69b043d 100644 --- a/DUDUJI/Views/InstanceInfoView.swift +++ b/DUDUJI/Views/InstanceInfoView.swift @@ -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")") }