punchnet-macos/punchnet/Views/RootView.swift
2026-03-24 00:05:17 +08:00

71 lines
2.2 KiB
Swift

//
// RootView.swift
// punchnet
//
// Created by on 2026/1/19.
//
import SwiftUI
struct RootView: View {
@Environment(AppContext.self) var appContext: AppContext
@State private var updateManager = AppUpdateManager.shared
var body: some View {
ZStack {
//
Group {
switch appContext.appScene {
case .login(username: let username):
LoginView(username: username)
case .logined:
NetworkView()
case .register:
RegisterRootView()
case .resetPassword:
ResetPasswordRootView()
}
}
.transition(.asymmetric(
insertion: .move(edge: .trailing).combined(with: .opacity),
removal: .move(edge: .trailing).combined(with: .opacity)
))
//
if updateManager.showUpdateOverlay, let info = updateManager.updateInfo {
//
Color.black.opacity(0.4)
.ignoresSafeArea()
.onTapGesture {
if !info.forceUpdate {
updateManager.showUpdateOverlay = false
}
}
//
AppUpdateView(info: info) {
updateManager.showUpdateOverlay = false
}
.clipShape(RoundedRectangle(cornerRadius: 16))
.shadow(color: .black.opacity(0.3), radius: 20)
.transition(.asymmetric(
insertion: .scale(scale: 0.9).combined(with: .opacity),
removal: .opacity
))
}
}
.animation(.spring(duration: 0.4), value: updateManager.showUpdateOverlay)
.task {
//
let checkUpdateResult = await updateManager.checkUpdate(isManual: false)
NSLog("[RootView] checkUpdateResult: \(checkUpdateResult)")
}
}
}
#Preview {
RootView()
}