XuqmGroup-iOSSDK/XuqmDemo/Sources/XuqmDemoApp.swift

101 行
2.6 KiB
Swift

import SwiftUI
import XuqmSDK
@main
struct XuqmDemoApp: App {
#if canImport(UIKit)
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
#endif
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
#if canImport(UIKit)
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
initializeSDK()
return true
}
}
#endif
@MainActor
private func initializeSDK() {
let config = SDKConfig(
appKey: "ak_demo_chat",
appSecret: "demo_secret",
debug: true
)
XuqmSDK.shared.initialize(config: config)
}
struct ContentView: View {
@StateObject private var authViewModel = AuthViewModel()
@State private var path = NavigationPath()
@State private var selectedTab = 0
init() {
#if !canImport(UIKit)
initializeSDK()
#endif
}
var body: some View {
Group {
if case .success = authViewModel.state {
MainTabView(authViewModel: authViewModel, path: $path, selectedTab: $selectedTab)
} else {
NavigationStack {
LoginView(viewModel: authViewModel)
}
}
}
}
}
struct MainTabView: View {
@ObservedObject var authViewModel: AuthViewModel
@Binding var path: NavigationPath
@Binding var selectedTab: Int
var body: some View {
NavigationStack(path: $path) {
TabView(selection: $selectedTab) {
ConversationListView(path: $path)
.tabItem {
Image(systemName: "message.fill")
Text("会话")
}
.tag(0)
UpdateCheckView()
.tabItem {
Image(systemName: "arrow.up.circle.fill")
Text("更新")
}
.tag(1)
ProfileView(authViewModel: authViewModel)
.tabItem {
Image(systemName: "person.fill")
Text("我的")
}
.tag(2)
}
.navigationDestination(for: AppRoute.self) { route in
switch route {
case .chat(let targetId, let targetName):
ChatView(targetId: targetId, targetName: targetName, currentUserId: authViewModel.currentUserId)
}
}
}
}
}