| 12345678910111213141516171819202122232425262728293031 |
- import Combine
- import Foundation
- import SwiftUI
- extension Notification.Name {
- static let themeDidChange = Notification.Name("themeDidChange")
- }
- @MainActor
- final class ThemeManager: ObservableObject {
- static let storageKey = "isDarkMode"
- @Published var isDarkMode: Bool {
- didSet {
- guard isDarkMode != oldValue else { return }
- defaults.set(isDarkMode, forKey: Self.storageKey)
- NotificationCenter.default.post(name: .themeDidChange, object: nil)
- }
- }
- private let defaults: UserDefaults
- init(defaults: UserDefaults = .standard) {
- self.defaults = defaults
- self.isDarkMode = defaults.bool(forKey: Self.storageKey)
- }
- var preferredColorScheme: ColorScheme? {
- isDarkMode ? .dark : .light
- }
- }
|