ColorScheme
Skip support for SwiftUI.ColorScheme.
The following example screens and source code is from SkipUI’s
Showcase sample app
ColorSchemePlayground.swift
import SwiftUI
struct ColorSchemePlayground: View {
@State var isDarkMode = false
@State var preferredColorScheme = ""
@State var isPresented = false
var body: some View {
VStack(spacing: 16) {
VStack {
Text("This text is in \(isDarkMode ? "Dark" : "Light") mode")
.font(.largeTitle)
Button("Toggle") {
isDarkMode = !isDarkMode
}
.buttonStyle(.borderedProminent)
}
.padding(32)
.background()
.padding(32)
.colorScheme(isDarkMode ? .dark : .light)
Picker(".preferredColorScheme", selection: $preferredColorScheme) {
Text("System").tag("")
Text("Light").tag("light")
Text("Dark").tag("dark")
}
NavigationLink("Push") {
Text("Pushed")
}
Button("Present") {
isPresented = true
}
}
.preferredColorScheme(namedColorScheme(for: preferredColorScheme))
.sheet(isPresented: $isPresented) {
ColorSchemeSheetView()
}
.toolbar {
PlaygroundSourceLink(file: "ColorSchemePlayground.swift")
}
}
}
private struct ColorSchemeSheetView: View {
@Environment(\.dismiss) var dismiss
@State var preferredColorScheme = ""
var body: some View {
NavigationStack {
VStack(spacing: 16) {
Picker(".preferredColorScheme", selection: $preferredColorScheme) {
Text("System").tag("")
Text("Light").tag("light")
Text("Dark").tag("dark")
}
NavigationLink("Push") {
Text("Pushed")
}
}
.preferredColorScheme(namedColorScheme(for: preferredColorScheme))
.navigationTitle("Sheet")
.toolbar {
Button("Dismiss") {
dismiss()
}
}
}
}
}
private func namedColorScheme(for string: String) -> ColorScheme? {
switch string {
case "light":
return .light
case "dark":
return .dark
default:
return nil
}
}