Преглед изворни кода

Fix diagnostics selection not updating due to broken binding

Deniz Cengiz пре 1 година
родитељ
комит
5c99d58748

+ 13 - 3
Trio/Sources/Modules/Onboarding/OnboardingStateModel.swift

@@ -25,13 +25,23 @@ extension Onboarding {
 
         // MARK: - App Diagnostics
 
-        var diagnosticsSharingOption: DiagnosticsSharingOption {
-            get { (PropertyPersistentFlags.shared.diagnosticsSharingEnabled ?? true) ? .enabled : .disabled }
-            set { PropertyPersistentFlags.shared.diagnosticsSharingEnabled = (newValue == .enabled) }
+        private var persistedDiagnosticsSharing: Bool? {
+            get { PropertyPersistentFlags.shared.diagnosticsSharingEnabled }
+            set { PropertyPersistentFlags.shared.diagnosticsSharingEnabled = newValue }
         }
 
+        var diagnosticsSharingOption: DiagnosticsSharingOption = .enabled
         var hasAcceptedPrivacyPolicy: Bool = false
 
+        func syncDiagnosticsOptionFromStorage() {
+            diagnosticsSharingOption = (persistedDiagnosticsSharing ?? true) ? .enabled : .disabled
+        }
+
+        func updateDiagnosticsOption(to option: DiagnosticsSharingOption) {
+            diagnosticsSharingOption = option
+            persistedDiagnosticsSharing = (option == .enabled)
+        }
+
         // MARK: - Determine Initial Build State
 
         /// Determines whether the app is in a fresh install state for Trio v0.3.0.

+ 4 - 1
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/DiagnosticsStepView.swift

@@ -14,7 +14,7 @@ struct DiagnosticsStepView: View {
 
             ForEach(DiagnosticsSharingOption.allCases, id: \.self) { option in
                 Button(action: {
-                    state.diagnosticsSharingOption = option
+                    state.updateDiagnosticsOption(to: option)
                 }) {
                     HStack {
                         Image(systemName: state.diagnosticsSharingOption == option ? "largecircle.fill.circle" : "circle")
@@ -83,6 +83,9 @@ struct DiagnosticsStepView: View {
             .font(.footnote)
             .foregroundStyle(Color.secondary)
         }
+        .onAppear {
+            state.syncDiagnosticsOptionFromStorage()
+        }
         .sheet(isPresented: $shouldDisplayPrivacyPolicy) {
             PrivacyPolicyView()
         }