Eu tenho um enum que trata do tema do meu aplicativo. Gostaria de ter uma .system
opção onde retornasse um valor diferente dependendo do tema do sistema (claro ou escuro). Abaixo está como eu implementei, código irrelevante removido:
enum Theme: String, CaseIterable, Identifiable, Codable {
case system
case dark
case light
/* more cases */
var mainColor: Color {
@Environment(\.colorScheme) var colorScheme
switch self {
case .system: return colorScheme == .dark ? .dark : .light
default: return Color(rawValue)
}
}
}
Porém, quando o executo, recebo o erro Accessing Environment<ColorScheme>'s value outside of being installed on a View. This will always read the default value and will not update
. Isso faz sentido, pois obviamente o enum não é uma visualização. Dito isso, como posso acessar a colorScheme
variável de ambiente do meu enum? Ou existe uma maneira diferente de fazer isso?
Isso não é possível. Acessar um
@Environment
valor só é possível dentro de um SwiftUIView
.Mas como
mainColor
é apenas uma propriedade computada e não um caso de enum, você pode substituir essa propriedade computada por um método e chamar esse método:Então você pode adicionar
@Environment(\.colorScheme) var colorScheme
à sua visão e passarcolorScheme
como argumento: