RadrootsProvider.swift (1217B)
1 import SwiftUI 2 3 public struct RadrootsProvider<Content: View>: View { 4 @Environment(\.scenePhase) private var scenePhase 5 @StateObject private var appState = AppState() 6 private let onStartupError: ((Error) -> Void)? 7 private let content: () -> Content 8 9 public init( 10 onStartupError: ((Error) -> Void)? = nil, 11 @ViewBuilder content: @escaping () -> Content 12 ) { 13 self.onStartupError = onStartupError 14 self.content = content 15 } 16 17 public var body: some View { 18 content() 19 .environmentObject(appState) 20 .environmentObject(appState.radroots) 21 .task { 22 do { 23 try await appState.start() 24 } catch { 25 onStartupError?(error) 26 } 27 } 28 .onChange(of: scenePhase) { _, phase in 29 switch phase { 30 case .active: 31 appState.appDidBecomeActive() 32 case .background: 33 appState.appDidEnterBackground() 34 case .inactive: 35 break 36 @unknown default: 37 break 38 } 39 } 40 } 41 }