fix binding
This commit is contained in:
parent
2c440a32c7
commit
dee3e26c33
@ -18,8 +18,8 @@ class VPNManager {
|
||||
private var manager: NETunnelProviderManager?
|
||||
private var statusObserver: NSObjectProtocol?
|
||||
|
||||
var isConnected: Bool = false
|
||||
var vpnStatus: VPNStatus = .disconnected
|
||||
var isConnected: Bool = false
|
||||
|
||||
var vpnStatusStream: AsyncStream<VPNStatus>
|
||||
private var vpnStatusCont: AsyncStream<VPNStatus>.Continuation
|
||||
|
||||
@ -90,6 +90,11 @@ class AppContext {
|
||||
throw AppContextError.nullNetworkSession
|
||||
}
|
||||
|
||||
// 避免重复连接
|
||||
guard !vpnManager.isConnected else {
|
||||
return
|
||||
}
|
||||
|
||||
let context = try await SDLAPIClient.connectNetwork(accesToken: session.accessToken)
|
||||
if let options = SystemConfig.getOptions(
|
||||
networkId: UInt32(session.networkId),
|
||||
|
||||
@ -105,6 +105,21 @@ struct NetworkStatusBar: View {
|
||||
@State private var vpnManger = VPNManager.shared
|
||||
|
||||
var body: some View {
|
||||
let isOnBinding = Binding(
|
||||
get: { vpnManger.isConnected },
|
||||
set: { newValue in
|
||||
if newValue {
|
||||
Task {
|
||||
try? await self.appContext.connectNetwork()
|
||||
}
|
||||
} else {
|
||||
Task {
|
||||
try? await self.appContext.disconnectNetwork()
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
HStack(spacing: 12) {
|
||||
// 左侧:状态指示器与文字
|
||||
HStack(spacing: 20) {
|
||||
@ -133,12 +148,13 @@ struct NetworkStatusBar: View {
|
||||
|
||||
// 右侧:Switch 开关
|
||||
// 注意:这里使用 Binding 手动接管连接/断开逻辑
|
||||
Toggle("", isOn: $vpnManger.isConnected)
|
||||
Toggle("", isOn: isOnBinding)
|
||||
.toggleStyle(.switch)
|
||||
.controlSize(.small) // macOS 顶部栏或面板推荐使用 small 尺寸
|
||||
}
|
||||
.padding(.vertical, 5)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
struct NetworkConnectedView: View {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user