Support SwiftUI style for managing animation state
Opened this issue · 0 comments
ilyakuteev commented
The problem
Consider the following example (Taken from an app built using TCA):
struct SwiftUIView: View {
var store: StoreOf<Feature>
var animation = try! RiveViewModel(
RiveModel(fileName: "Animation", in: .module)
)
var cancellables: Set<AnyCancellable> = []
init(store: StoreOf< Feature >) {
self. store = store
// Problem here ❌
ViewStore(store, observe: ViewState.init).publisher.sink { [animation] viewState in
animation.setInput("Error", value: viewState.isError)
animation.setInput("Success", value: viewState.isSuccess)
}.store(in: &cancellables)
}
var body {
animation.view()
}
}
This example shows the problem while using Rive and SwiftUI together.
Animation state is managed in UIKit-like control flow style.
Proposal
Add SwiftUI-like state management:
struct SwiftUIView: View {
var store: StoreOf<Feature>
var animation = try! RiveViewModel(
RiveModel(fileName: "Animation", in: .module)
)
var body {
WithViewStore(store) { viewStore in
animation.view()
.input("Error", value: viewState.isError)
.input("Success", value: viewState.isSuccess)
}
}
}
In this case code gets simplier, animation state is now managed in view's body
property and SwiftUI programming patterns are satisfied.