This commit is contained in:
anlicheng 2025-02-21 23:14:56 +08:00
parent 0b26a83cf4
commit 5e36018722

View File

@ -47,6 +47,10 @@ final class DetailModel {
var status: Int = 0
var channels: [Channel] = []
// channel
var selectedChannelIdx: Int = 0
var selectedEpisodes: [Episode] = []
@MainActor
func loadData(dramaId: Int) async {
let response = await API.getDramaDetail(as: DramaDetailResponse.self)
@ -59,8 +63,17 @@ final class DetailModel {
self.voiceActors = detail.voice_actors
self.status = detail.status
self.channels = detail.channels
self.selectedChannelIdx = 0
self.selectedEpisodes = detail.channels[0].episodes
}
}
func toggleChannel(channelIdx: Int) {
self.selectedChannelIdx = channelIdx
self.selectedEpisodes = self.channels[channelIdx].episodes
}
}
struct DetailView: View {
@ -100,7 +113,39 @@ struct DetailView: View {
}
//
HStack(alignment: .center) {
ForEach(Array(detailModel.channels.enumerated()), id: \.offset) { idx, channel in
Text(channel.name)
.font(.system(size: 16))
.foregroundColor(idx == detailModel.selectedChannelIdx ? .blue : .black)
.onTapGesture {
detailModel.toggleChannel(channelIdx: idx)
}
}
}
//
ScrollView(.horizontal, showsIndicators: false) {
HStack(alignment: .center) {
ForEach(detailModel.selectedEpisodes, id: \.id) { episode in
VStack(alignment: .center) {
AsyncImage(url: URL(string: episode.thumb)) { image in
image.resizable()
} placeholder: {
ProgressView()
}
.frame(width: 80, height: 80)
.overlay {
Text(episode.numName)
}
Text(episode.name)
.lineLimit(1)
}
.frame(width: 100, height: 120)
}
}
}
}
.task {