import SwiftUI @MainActor enum AppRoute: Hashable { case login case avatarBox case feedbackView case feedbackDetail(type: FeedbackView.FeedbackType) case mediaUpload case blindBox(mediaType: BlindBoxMediaType, blindBoxId: String? = nil) case blindOutcome(media: MediaType, time: String? = nil, description: String? = nil, isMember: Bool) case memories case subscribe case userInfo case account case about case permissionManagement case feedback @ViewBuilder var view: some View { switch self { case .login: LoginView() case .avatarBox: // AvatarBoxView has been removed; route to BlindBoxView as replacement BlindBoxView(mediaType: .all) case .feedbackView: FeedbackView() case .feedbackDetail(let type): FeedbackDetailView(feedbackType: type) case .mediaUpload: MediaUploadView() case .blindBox(let mediaType, let blindBoxId): BlindBoxView(mediaType: mediaType, blindBoxId: blindBoxId) case .blindOutcome(let media, let time, let description, let isMember): BlindOutcomeView(media: media, time: time, description: description, isMember: isMember) case .memories: MemoriesView() case .subscribe: SubscribeView() case .userInfo: UserInfo() case .account: AccountView() case .about: AboutUsView() case .permissionManagement: PermissionManagementView() case .feedback: FeedbackView() } } } @MainActor class Router: ObservableObject { static let shared = Router() @Published var path = NavigationPath() private init() {} func navigate(to destination: AppRoute) { path.append(destination) } func pop() { path.removeLast() } func popToRoot() { path = NavigationPath() } }