field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | LICENSE

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 }