diff --git a/Shared/Navigation/ContentView.swift b/Shared/Navigation/ContentView.swift index 16cb4b1..b404072 100644 --- a/Shared/Navigation/ContentView.swift +++ b/Shared/Navigation/ContentView.swift @@ -1,23 +1,25 @@ import SwiftUI struct ContentView: View { @ObservedObject var postStore: PostStore + @ObservedObject var preferences: PreferencesModel var body: some View { NavigationView { SidebarView() PostList(selectedCollection: allPostsCollection) Text("Select a post, or create a new draft.") .foregroundColor(.secondary) } .environmentObject(postStore) + .environmentObject(preferences) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { - ContentView(postStore: testPostStore) + ContentView(postStore: testPostStore, preferences: PreferencesModel()) } } diff --git a/Shared/Preferences/PreferencesView.swift b/Shared/Preferences/PreferencesView.swift index 290dd46..e45ff17 100644 --- a/Shared/Preferences/PreferencesView.swift +++ b/Shared/Preferences/PreferencesView.swift @@ -1,28 +1,28 @@ import SwiftUI struct PreferencesView: View { - @State private var appearance: Int = 0 + @ObservedObject var preferences: PreferencesModel var body: some View { #if os(iOS) - Picker(selection: $appearance, label: Text("Appearance")) { + Picker(selection: $preferences.appearance, label: Text("Appearance")) { Text("System").tag(0) Text("Light Mode").tag(1) Text("Dark Mode").tag(2) } .pickerStyle(SegmentedPickerStyle()) #elseif os(macOS) - Picker(selection: $appearance, label: Text("Appearance")) { + Picker(selection: $preferences.appearance, label: Text("Appearance")) { Text("System").tag(0) Text("Light Mode").tag(1) Text("Dark Mode").tag(2) } #endif } } struct SwiftUIView_Previews: PreviewProvider { static var previews: some View { - PreferencesView() + PreferencesView(preferences: PreferencesModel()) } } diff --git a/Shared/WriteFreely_MultiPlatformApp.swift b/Shared/WriteFreely_MultiPlatformApp.swift index d96c106..1b426da 100644 --- a/Shared/WriteFreely_MultiPlatformApp.swift +++ b/Shared/WriteFreely_MultiPlatformApp.swift @@ -1,24 +1,27 @@ import SwiftUI @main struct WriteFreely_MultiPlatformApp: App { + @StateObject private var preferences = PreferencesModel() + #if DEBUG @StateObject private var store = testPostStore #else @StateObject private var store = PostStore() #endif var body: some Scene { WindowGroup { - ContentView(postStore: store) + ContentView(postStore: store, preferences: preferences) + .environment(\.colorScheme, preferences.preferredColorScheme) } #if os(macOS) Settings { - SettingsView() + SettingsView(preferences: preferences) .frame(minWidth: 300, maxWidth: 300, minHeight: 200, maxHeight: 200) .padding() } #endif } } diff --git a/iOS/Settings/SettingsView.swift b/iOS/Settings/SettingsView.swift index daed735..50ad760 100644 --- a/iOS/Settings/SettingsView.swift +++ b/iOS/Settings/SettingsView.swift @@ -1,25 +1,28 @@ import SwiftUI struct SettingsView: View { + @EnvironmentObject var preferences: PreferencesModel + @Binding var isPresented: Bool var body: some View { VStack { SettingsHeaderView(isPresented: $isPresented) Form { Section(header: Text("Login Details")) { AccountView() } Section(header: Text("Appearance")) { - PreferencesView() + PreferencesView(preferences: preferences) } } } + .preferredColorScheme(preferences.preferredColorScheme) } } struct SettingsView_Previews: PreviewProvider { static var previews: some View { SettingsView(isPresented: .constant(true)) } } diff --git a/macOS/Settings/SettingsView.swift b/macOS/Settings/SettingsView.swift index 40af22c..b4b9393 100644 --- a/macOS/Settings/SettingsView.swift +++ b/macOS/Settings/SettingsView.swift @@ -1,41 +1,43 @@ import SwiftUI struct SettingsView: View { + @ObservedObject var preferences: PreferencesModel + @State var selectedView = 0 var body: some View { TabView(selection: $selectedView) { Form { Section(header: Text("Login Details")) { AccountView() } } .tabItem { Image(systemName: "person.crop.circle") Text("Account") } .tag(0) VStack { - PreferencesView() + PreferencesView(preferences: preferences) Spacer() } .tabItem { Image(systemName: "gear") Text("Preferences") } .tag(1) } } } struct SettingsView_AccountTabPreviews: PreviewProvider { static var previews: some View { - SettingsView(selectedView: 0) + SettingsView(preferences: PreferencesModel(), selectedView: 0) } } struct SettingsView_PreferencesTabPreviews: PreviewProvider { static var previews: some View { - SettingsView(selectedView: 1) + SettingsView(preferences: PreferencesModel(), selectedView: 1) } }