我這樣做了,但是在整個 contentView 中再次加載并且應用程式即將進入開始螢屏。
struct ThemeChangeDemoApp: App {
@AppStorage("theme") var currentThemeRawValue: String = "dark"
var body: some Scene {
WindowGroup {
switch currentThemeRawValue {
case Theme.dark.rawValue:
ContentView().environment(\.colorScheme, .dark)
case Theme.light.rawValue:
ContentView().environment(\.colorScheme, .light)
default:
ContentView().environment(\.colorScheme, .dark)
}
}
}
}
從這里我改變主題。我將列舉的 rawValue 保存為“暗”或“亮”。
struct Settings: View {
var body: some View {
Button {
let currentTheme = UserDefaultsHelper.getCurrentTheme()
switch currentTheme {
case Theme.dark.rawValue:
UserDefaultsHelper.saveTheme(theme: .light)
case Theme.light.rawValue:
UserDefaultsHelper.saveTheme(theme: .dark)
default:
UserDefaultsHelper.saveTheme(theme: .light)
}
} label: {
Text("Toggle theme")
}
}
}
uj5u.com熱心網友回復:
WindowGroup {
switch currentThemeRawValue {
case Theme.dark.rawValue:
ContentView().environment(\.colorScheme, .dark)
case Theme.light.rawValue:
ContentView().environment(\.colorScheme, .light)
default:
ContentView().environment(\.colorScheme, .dark)
}
}
switch 陳述句意味著 SwiftUI 正在使用條件內容填充視圖,因此如果值更改,它將重建整個層次結構。你只是真的想改變環境值本身,所以這樣的事情可能會更好:
WindowGroup {
ContentView()
.environment(\.colorScheme, currentThemeRawValue == "dark" ?? .dark : .light)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444565.html
