Skip to content

Commit de1c4c5

Browse files
authored
feat: Reanimated shared value → Rive property binding (#64)
* feat: add Reanimated shared value to Rive property binding example Demonstrates driving Rive ViewModelNumberProperty from Reanimated shared values using NitroModules.box() to share HybridObjects with worklets. * fix: use correct worklets package for Reanimated 4.x * feat: add pan gesture to shared value example * _playIfNeeded on android * android implementation * fix: lint and android version * upograde nitro * fix ktlint error * playIfNeeded * fix: change _playIfNeeded to playIfNeeded * adjust progress
1 parent b0d5079 commit de1c4c5

35 files changed

Lines changed: 513 additions & 72 deletions

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
118118

119119
override fun reset() = asyncExecuteOnUiThread { view.reset() }
120120

121+
override fun playIfNeeded() = view.playIfNeeded()
122+
121123
override fun onEventListener(onEvent: (event: UnifiedRiveEvent) -> Unit) =
122124
executeOnUiThread { view.addEventListener(onEvent) }
123125

android/src/main/java/com/rive/RiveReactNativeView.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,14 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
190190

191191
fun reset() = riveAnimationView?.reset()
192192

193+
fun playIfNeeded() {
194+
if (riveAnimationView?.isPlaying == false) {
195+
riveAnimationView?.post {
196+
riveAnimationView?.play()
197+
}
198+
}
199+
}
200+
193201
fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
194202
val eventListener = object : RiveFileController.RiveEventListener {
195203
override fun notifyEvent(event: RiveEvent) {

example/assets/rive/movecircle.riv

307 Bytes
Binary file not shown.

example/babel.config.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ const root = path.resolve(__dirname, '..');
77
module.exports = getConfig(
88
{
99
presets: ['module:@react-native/babel-preset'],
10-
plugins: [['babel-plugin-react-compiler', {}]],
10+
plugins: [
11+
['babel-plugin-react-compiler', {}],
12+
'react-native-reanimated/plugin',
13+
],
1114
},
1215
{ root, pkg }
1316
);

example/ios/Podfile.lock

Lines changed: 161 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ PODS:
88
- hermes-engine (0.79.2):
99
- hermes-engine/Pre-built (= 0.79.2)
1010
- hermes-engine/Pre-built (0.79.2)
11-
- NitroModules (0.31.4):
11+
- NitroModules (0.31.10):
1212
- DoubleConversion
1313
- glog
1414
- hermes-engine
@@ -1803,6 +1803,83 @@ PODS:
18031803
- ReactCommon/turbomodule/bridging
18041804
- ReactCommon/turbomodule/core
18051805
- Yoga
1806+
- RNReanimated (4.1.5):
1807+
- DoubleConversion
1808+
- glog
1809+
- hermes-engine
1810+
- RCT-Folly (= 2024.11.18.00)
1811+
- RCTRequired
1812+
- RCTTypeSafety
1813+
- React-Core
1814+
- React-debug
1815+
- React-Fabric
1816+
- React-featureflags
1817+
- React-graphics
1818+
- React-hermes
1819+
- React-ImageManager
1820+
- React-jsi
1821+
- React-NativeModulesApple
1822+
- React-RCTFabric
1823+
- React-renderercss
1824+
- React-rendererdebug
1825+
- React-utils
1826+
- ReactCodegen
1827+
- ReactCommon/turbomodule/bridging
1828+
- ReactCommon/turbomodule/core
1829+
- RNReanimated/reanimated (= 4.1.5)
1830+
- RNWorklets
1831+
- Yoga
1832+
- RNReanimated/reanimated (4.1.5):
1833+
- DoubleConversion
1834+
- glog
1835+
- hermes-engine
1836+
- RCT-Folly (= 2024.11.18.00)
1837+
- RCTRequired
1838+
- RCTTypeSafety
1839+
- React-Core
1840+
- React-debug
1841+
- React-Fabric
1842+
- React-featureflags
1843+
- React-graphics
1844+
- React-hermes
1845+
- React-ImageManager
1846+
- React-jsi
1847+
- React-NativeModulesApple
1848+
- React-RCTFabric
1849+
- React-renderercss
1850+
- React-rendererdebug
1851+
- React-utils
1852+
- ReactCodegen
1853+
- ReactCommon/turbomodule/bridging
1854+
- ReactCommon/turbomodule/core
1855+
- RNReanimated/reanimated/apple (= 4.1.5)
1856+
- RNWorklets
1857+
- Yoga
1858+
- RNReanimated/reanimated/apple (4.1.5):
1859+
- DoubleConversion
1860+
- glog
1861+
- hermes-engine
1862+
- RCT-Folly (= 2024.11.18.00)
1863+
- RCTRequired
1864+
- RCTTypeSafety
1865+
- React-Core
1866+
- React-debug
1867+
- React-Fabric
1868+
- React-featureflags
1869+
- React-graphics
1870+
- React-hermes
1871+
- React-ImageManager
1872+
- React-jsi
1873+
- React-NativeModulesApple
1874+
- React-RCTFabric
1875+
- React-renderercss
1876+
- React-rendererdebug
1877+
- React-utils
1878+
- ReactCodegen
1879+
- ReactCommon/turbomodule/bridging
1880+
- ReactCommon/turbomodule/core
1881+
- RNWorklets
1882+
- Yoga
18061883
- RNRive (0.1.0):
18071884
- DoubleConversion
18081885
- glog
@@ -1829,6 +1906,80 @@ PODS:
18291906
- ReactCommon/turbomodule/core
18301907
- RiveRuntime (= 6.12.0)
18311908
- Yoga
1909+
- RNWorklets (0.6.1):
1910+
- DoubleConversion
1911+
- glog
1912+
- hermes-engine
1913+
- RCT-Folly (= 2024.11.18.00)
1914+
- RCTRequired
1915+
- RCTTypeSafety
1916+
- React-Core
1917+
- React-debug
1918+
- React-Fabric
1919+
- React-featureflags
1920+
- React-graphics
1921+
- React-hermes
1922+
- React-ImageManager
1923+
- React-jsi
1924+
- React-NativeModulesApple
1925+
- React-RCTFabric
1926+
- React-renderercss
1927+
- React-rendererdebug
1928+
- React-utils
1929+
- ReactCodegen
1930+
- ReactCommon/turbomodule/bridging
1931+
- ReactCommon/turbomodule/core
1932+
- RNWorklets/worklets (= 0.6.1)
1933+
- Yoga
1934+
- RNWorklets/worklets (0.6.1):
1935+
- DoubleConversion
1936+
- glog
1937+
- hermes-engine
1938+
- RCT-Folly (= 2024.11.18.00)
1939+
- RCTRequired
1940+
- RCTTypeSafety
1941+
- React-Core
1942+
- React-debug
1943+
- React-Fabric
1944+
- React-featureflags
1945+
- React-graphics
1946+
- React-hermes
1947+
- React-ImageManager
1948+
- React-jsi
1949+
- React-NativeModulesApple
1950+
- React-RCTFabric
1951+
- React-renderercss
1952+
- React-rendererdebug
1953+
- React-utils
1954+
- ReactCodegen
1955+
- ReactCommon/turbomodule/bridging
1956+
- ReactCommon/turbomodule/core
1957+
- RNWorklets/worklets/apple (= 0.6.1)
1958+
- Yoga
1959+
- RNWorklets/worklets/apple (0.6.1):
1960+
- DoubleConversion
1961+
- glog
1962+
- hermes-engine
1963+
- RCT-Folly (= 2024.11.18.00)
1964+
- RCTRequired
1965+
- RCTTypeSafety
1966+
- React-Core
1967+
- React-debug
1968+
- React-Fabric
1969+
- React-featureflags
1970+
- React-graphics
1971+
- React-hermes
1972+
- React-ImageManager
1973+
- React-jsi
1974+
- React-NativeModulesApple
1975+
- React-RCTFabric
1976+
- React-renderercss
1977+
- React-rendererdebug
1978+
- React-utils
1979+
- ReactCodegen
1980+
- ReactCommon/turbomodule/bridging
1981+
- ReactCommon/turbomodule/core
1982+
- Yoga
18321983
- SocketRocket (0.7.1)
18331984
- Yoga (0.0.0)
18341985

@@ -1908,7 +2059,9 @@ DEPENDENCIES:
19082059
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
19092060
- "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
19102061
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
2062+
- RNReanimated (from `../node_modules/react-native-reanimated`)
19112063
- RNRive (from `../..`)
2064+
- RNWorklets (from `../node_modules/react-native-worklets`)
19122065
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
19132066

19142067
SPEC REPOS:
@@ -2064,8 +2217,12 @@ EXTERNAL SOURCES:
20642217
:path: "../node_modules/@react-native-picker/picker"
20652218
RNGestureHandler:
20662219
:path: "../node_modules/react-native-gesture-handler"
2220+
RNReanimated:
2221+
:path: "../node_modules/react-native-reanimated"
20672222
RNRive:
20682223
:path: "../.."
2224+
RNWorklets:
2225+
:path: "../node_modules/react-native-worklets"
20692226
Yoga:
20702227
:path: "../node_modules/react-native/ReactCommon/yoga"
20712228

@@ -2077,7 +2234,7 @@ SPEC CHECKSUMS:
20772234
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
20782235
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
20792236
hermes-engine: 314be5250afa5692b57b4dd1705959e1973a8ebe
2080-
NitroModules: 8229091083785ae690dc9071f07fc412e0cb8243
2237+
NitroModules: 7f50ee216f8403e8eb243acfc504f3f856d6914c
20812238
RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809
20822239
RCTDeprecation: 83ffb90c23ee5cea353bd32008a7bca100908f8c
20832240
RCTRequired: eb7c0aba998009f47a540bec9e9d69a54f68136e
@@ -2144,7 +2301,9 @@ SPEC CHECKSUMS:
21442301
RiveRuntime: 8d819993126145fbf5a73089e7634b14b9aa577f
21452302
RNCPicker: 83c74db2de8274d8a8f3e18d91dea174a708f8c4
21462303
RNGestureHandler: bff91bb5ab5688265c70f74180ef718b94f33fe3
2304+
RNReanimated: 9a24892f34ea317264883806d2e3de7ce34eab90
21472305
RNRive: 6ced82b0b2ff90cbb87813849e9c05761d038119
2306+
RNWorklets: ddf16938b1ed7e878563a4fc8a690968ef3d27f1
21482307
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
21492308
Yoga: 9f110fc4b7aa538663cba3c14cbb1c335f43c13f
21502309

example/package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
"@react-navigation/stack": "^7.3.2",
1616
"react": "19.0.0",
1717
"react-native": "0.79.2",
18-
"react-native-gesture-handler": "^2.25.0",
19-
"react-native-nitro-modules": "^0.31.3",
20-
"react-native-safe-area-context": "^5.4.0"
18+
"react-native-gesture-handler": "2.29.1",
19+
"react-native-nitro-modules": "0.31.10",
20+
"react-native-reanimated": "4.1.5",
21+
"react-native-safe-area-context": "^5.4.0",
22+
"react-native-worklets": "0.6.1"
2123
},
2224
"devDependencies": {
2325
"@babel/core": "^7.25.2",

0 commit comments

Comments
 (0)