Skip to content

Commit c981692

Browse files
committed
feat: add viewModelInstance to ViewProps, so we don't need to wait for ref
1 parent a4ed4ec commit c981692

19 files changed

+137
-50
lines changed

example/src/pages/RiveDataBindingExample.tsx

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
2-
import { useEffect, useMemo } from 'react';
2+
import { useEffect, useMemo, useState } from 'react';
33
import {
44
Fit,
55
RiveView,
@@ -61,14 +61,6 @@ function DataBindingExample({
6161
instance: ViewModelInstance;
6262
file: RiveFile;
6363
}) {
64-
const { riveViewRef, setHybridRef } = useRive();
65-
66-
useEffect(() => {
67-
if (riveViewRef) {
68-
riveViewRef.bindViewModelInstance(instance);
69-
}
70-
}, [riveViewRef, instance]);
71-
7264
const { error: coinValueError } = useRiveNumber('Coin/Item_Value', instance);
7365

7466
if (coinValueError) {
@@ -106,10 +98,10 @@ function DataBindingExample({
10698
style={styles.rive}
10799
autoBind={false}
108100
autoPlay={true}
101+
bind={instance}
109102
fit={Fit.Layout}
110103
layoutScaleFactor={1}
111104
file={file}
112-
hybridRef={setHybridRef}
113105
/>
114106
);
115107
}

ios/HybridRiveView.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ private struct DefaultConfiguration {
1212
}
1313

1414
class HybridRiveView : HybridRiveViewSpec {
15+
var bind: (any HybridViewModelInstanceSpec)?
16+
1517
// MARK: View Props
1618
var artboardName: String? { didSet { needsReload = true } }
1719
var stateMachineName: String? { didSet { needsReload = true } }
@@ -86,6 +88,7 @@ class HybridRiveView : HybridRiveViewSpec {
8688
guard let hybridFile = file as? HybridRiveFile,
8789
let file = hybridFile.riveFile else { return }
8890

91+
let viewModelInstance = (bind as? HybridViewModelInstance)?.viewModelInstance
8992
let config = ViewConfiguration(
9093
artboardName: artboardName,
9194
stateMachineName: stateMachineName,
@@ -95,7 +98,8 @@ class HybridRiveView : HybridRiveViewSpec {
9598
viewSource: hybridFile,
9699
alignment: convertAlignment(alignment) ?? DefaultConfiguration.alignment,
97100
fit: convertFit(fit) ?? DefaultConfiguration.fit,
98-
layoutScaleFactor: layoutScaleFactor ?? DefaultConfiguration.layoutScaleFactor
101+
layoutScaleFactor: layoutScaleFactor ?? DefaultConfiguration.layoutScaleFactor,
102+
bind: viewModelInstance
99103
)
100104

101105
try? getRiveView().configure(config, reload: needsReload)

ios/RiveReactNativeView.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ struct ViewConfiguration {
1717
let alignment: RiveRuntime.RiveAlignment
1818
let fit: RiveRuntime.RiveFit
1919
let layoutScaleFactor: Double
20+
let bind: RiveDataBindingViewModel.Instance?
2021
}
2122

2223
class RiveReactNativeView: UIView, RiveStateMachineDelegate {
@@ -66,6 +67,10 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
6667
viewReadyContinuation?.resume()
6768
viewReadyContinuation = nil
6869
}
70+
71+
if let bind = config.bind {
72+
baseViewModel?.riveModel?.stateMachine?.bind(viewModelInstance: bind)
73+
}
6974
}
7075

7176
func bindViewModelInstance(viewModelInstance: RiveDataBindingViewModel.Instance) {

nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/ios/Rive-Swift-Cxx-Bridge.cpp

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/ios/Rive-Swift-Cxx-Bridge.hpp

Lines changed: 27 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.hpp

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)