增加注解
This commit is contained in:
@@ -3,15 +3,19 @@ import SwiftData
|
||||
|
||||
/// 收藏页 - 对应 Android 版 CollectActivity
|
||||
struct FavoritesView: View {
|
||||
/// 按更新时间倒序展示收藏,最近收藏/更新的内容靠前。
|
||||
@Query(sort: \VodCollect.updateTime, order: .reverse)
|
||||
private var favorites: [VodCollect]
|
||||
/// SwiftData 上下文,用于删除收藏并持久化。
|
||||
@Environment(\.modelContext) private var modelContext
|
||||
|
||||
#if os(iOS)
|
||||
/// iOS 下卡片尺寸更紧凑,适配手机竖屏。
|
||||
private let columns = [
|
||||
GridItem(.adaptive(minimum: 120, maximum: 160), spacing: 12)
|
||||
]
|
||||
#else
|
||||
/// macOS 下卡片适度放大,提升桌面端可读性。
|
||||
private let columns = [
|
||||
GridItem(.adaptive(minimum: 140, maximum: 180), spacing: 16)
|
||||
]
|
||||
@@ -25,6 +29,7 @@ struct FavoritesView: View {
|
||||
} else {
|
||||
ScrollView {
|
||||
LazyVGrid(columns: columns, spacing: 16) {
|
||||
// 每个收藏项都可直接跳转详情,并支持右键取消收藏。
|
||||
ForEach(favorites) { item in
|
||||
NavigationLink(value: movieVideo(from: item)) {
|
||||
favoriteCard(item)
|
||||
@@ -50,12 +55,14 @@ struct FavoritesView: View {
|
||||
#if os(iOS)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
#endif
|
||||
// 通过 Movie.Video 作为路由载体,保持与首页/搜索页一致的详情入口。
|
||||
.navigationDestination(for: Movie.Video.self) { video in
|
||||
DetailView(video: video)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 空列表占位。
|
||||
private var emptyState: some View {
|
||||
EmptyStateView(
|
||||
icon: "heart.text.square",
|
||||
@@ -65,6 +72,8 @@ struct FavoritesView: View {
|
||||
.padding(40)
|
||||
}
|
||||
|
||||
/// 收藏卡片。
|
||||
/// 只展示海报与标题,保持网格信息密度一致。
|
||||
private func favoriteCard(_ item: VodCollect) -> some View {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
CachedAsyncImage(url: URL.posterURL(from: item.vodPic)) { image in
|
||||
@@ -83,6 +92,7 @@ struct FavoritesView: View {
|
||||
}
|
||||
}
|
||||
|
||||
/// 将收藏记录映射成详情页可识别的视频对象。
|
||||
private func movieVideo(from item: VodCollect) -> Movie.Video {
|
||||
Movie.Video(id: item.vodId, name: item.vodName, pic: item.vodPic, sourceKey: item.sourceKey)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user