Skip to content

Commit ad702d1

Browse files
mfazekasclaude
andcommitted
fix(android): trigger full reload on binding mode changes
- Remove in-place configureDataBinding() method - Set needsReload = true and call afterUpdate() when dataBind changes - Matches old rive-react-native pattern for referencedAssets changes - Full reload via setRiveFile() with new binding configuration - iOS keeps play() approach for smoother experience 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 8baafac commit ad702d1

1 file changed

Lines changed: 2 additions & 47 deletions

File tree

android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
5656
set(value) {
5757
if (field != value) {
5858
field = value
59-
configureDataBinding()
59+
needsReload = true
60+
afterUpdate()
6061
}
6162
}
6263
//endregion
@@ -111,52 +112,6 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
111112
view.getTextRunValue(name, path)
112113
//endregion
113114

114-
//region Data Binding
115-
private fun configureDataBinding() {
116-
executeOnUiThread {
117-
val stateMachines = view.riveAnimationView?.controller?.stateMachines
118-
val artboard = view.riveAnimationView?.controller?.activeArtboard
119-
if (stateMachines.isNullOrEmpty()) return@executeOnUiThread
120-
121-
when (dataBind) {
122-
is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.First -> {
123-
val instance = (dataBind.asFirstOrNull() as? HybridViewModelInstance)?.viewModelInstance
124-
instance?.let {
125-
artboard?.viewModelInstance = it
126-
stateMachines.first().viewModelInstance = it
127-
view.play()
128-
}
129-
}
130-
is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.Second -> {
131-
when (dataBind.asSecondOrNull()) {
132-
DataBindMode.AUTO -> {
133-
// Auto-binding requires reload
134-
view.play()
135-
}
136-
DataBindMode.NONE -> {
137-
// No binding
138-
view.play()
139-
}
140-
else -> {}
141-
}
142-
}
143-
is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.Third -> {
144-
val name = dataBind.asThirdOrNull()?.byName
145-
name?.let {
146-
val file = view.riveAnimationView?.controller?.file
147-
if (artboard != null && file != null) {
148-
val viewModel = file.defaultViewModelForArtboard(artboard)
149-
val instance = viewModel.createInstanceFromName(it)
150-
artboard.viewModelInstance = instance
151-
stateMachines.first().viewModelInstance = instance
152-
view.play()
153-
}
154-
}
155-
}
156-
}
157-
}
158-
}
159-
//endregion
160115

161116
//region Update
162117
fun refreshAfterAssetChange() {

0 commit comments

Comments
 (0)