AllanJuenemann / CalendarView

UICalendarView for SwiftUI
MIT License
49 stars 6 forks source link

Decoration didn't reload after observable object changed #1

Closed xspyhack closed 1 year ago

xspyhack commented 1 year ago
@State var observed: String = "star.fill"

CalendarView()
  .decorating(datesToDecorate) { dateComponents in
    if dateComponents.day == specialDay {
      return .customView {
        Image(systemName: observed) // won't trigger decoration reload after observed changed
          .foregroundColor(.yellow)
      }
    }

    return .default(color: .green, size: .small)
  }

Button {
  observed = "star"
} label: {
  Text("Change decoration")
}
xspyhack commented 1 year ago

Workaround

...
      return .customView {
        Decoration(observed: observed) // here!
      }
...

struct Decoration: View {
  @Bindable var observed: String
  var body: some View {
    Image(systemName: observed)
          .foregroundColor(.yellow)
  }
}