Skip to content

fix(ios): change event handlers to RCTDirectEventBlock(#24)#25

Merged
theashraf merged 1 commit intoLottieFiles:mainfrom
YOOGOMJA:fix/ios-event-registration
Oct 21, 2025
Merged

fix(ios): change event handlers to RCTDirectEventBlock(#24)#25
theashraf merged 1 commit intoLottieFiles:mainfrom
YOOGOMJA:fix/ios-event-registration

Conversation

@YOOGOMJA
Copy link
Contributor

@YOOGOMJA YOOGOMJA commented Oct 21, 2025

iOS generates multiple console warnings when importing or using the DotLottie component in v0.6.0:

Component 'DotlottieReactNativeView' re-registered direct event 'topLoad' as a bubbling event

RCTModuleConstantsForDestructuredComponent
    RCTUIManager.mm:107
facebook::react::(anonymous namespace)::getConstants(facebook::jsi::Runtime&)
decltype(std::declval<facebook::jsi::Value (*&)(facebook::jsi::Runtime&)>()(std::declval<facebook::jsi::Runtime&>())) std::__1::__invoke[abi:de200100]<facebook::jsi::Value (*&)(facebook::jsi::Runtime&), facebook::jsi::Runtime&>(facebook::jsi::Value (*&)(facebook::jsi::Runtime&), facebook::jsi::Runtime&)
facebook::jsi::Value std::__1::__invoke_void_return_wrapper<facebook::jsi::Value, false>::__call[abi:de200100]<facebook::jsi::Value (*&)(facebook::jsi::Runtime&), facebook::jsi::Runtime&>(facebook::jsi::Value (*&)(facebook::jsi::Runtime&), facebook::jsi::Runtime&)
facebook::jsi::Value std::__1::__invoke_r[abi:de200100]<facebook::jsi::Value, facebook::jsi::Value (*&)(facebook::jsi::Runtime&), facebook::jsi::Runtime&>(facebook::jsi::Value (*&)(facebook::jsi::Runtime&), facebook::jsi::Runtime&)
std::__1::__function::__alloc_func<facebook::jsi::Value (*)(facebook::jsi::Runtime&), std::__1::allocator<facebook::jsi::Value (*)(facebook::jsi::Runtime&)>, facebook::jsi::Value (facebook::jsi::Runtime&)>::operator()[abi:de200100](facebook::jsi::Runtime&)
std::__1::__function::__func<facebook::jsi::Value (*)(facebook::jsi::Runtime&), std::__1::allocator<facebook::jsi::Value (*)(facebook::jsi::Runtime&)>, facebook::jsi::Value (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&)
std::__1::__function::__value_func<facebook::jsi::Value (facebook::jsi::Runtime&)>::operator()[abi:de200100](facebook::jsi::Runtime&) const
std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&) const
facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0::operator()(facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long) const
decltype(std::declval<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&>()(std::declval<facebook::jsi::Runtime&>(), std::declval<facebook::jsi::Value const&>(), std::declval<facebook::jsi::Value const*>(), std::declval<unsigned long>())) std::__1::__invoke[abi:de200100]<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long>(facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)
facebook::jsi::Value std::__1::__invoke_void_return_wrapper<facebook::jsi::Value, false>::__call[abi:de200100]<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long>(facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)
facebook::jsi::Value std::__1::__invoke_r[abi:de200100]<facebook::jsi::Value, facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long>(facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)
std::__1::__function::__alloc_func<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0, std::__1::allocator<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0>, facebook::jsi::Value (facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)>::operator()[abi:de200100](facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)
std::__1::__function::__func<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0, std::__1::allocator<facebook::react::LegacyUIManagerConstantsProviderBinding::install(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<facebook::jsi::Value (facebook::jsi::Runtime&)>&&)::$_0>, facebook::jsi::Value (facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)>::operator()(facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::HFContext::func(void*, hermes::vm::Runtime&, hermes::vm::NativeArgs)
hermes::vm::NativeFunction::_nativeCall(hermes::vm::NativeFunction*, hermes::vm::Runtime&)
hermes::vm::CallResult<hermes::vm::HermesValue, (hermes::vm::detail::CallResultSpecialize)2> hermes::vm::Interpreter::interpretFunction<false, false>(hermes::vm::Runtime&, hermes::vm::InterpreterState&)
hermes::vm::Runtime::interpretFunctionImpl(hermes::vm::CodeBlock*)
hermes::vm::Runtime::runBytecode(std::__1::shared_ptr<hermes::hbc::BCProviderBase>&&, hermes::vm::RuntimeModuleFlags, llvh::StringRef, hermes::vm::Handle<hermes::vm::Environment>, hermes::vm::Handle<hermes::vm::HermesValue>)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::evaluatePreparedJavaScript(std::__1::shared_ptr<facebook::jsi::PreparedJavaScript const> const&)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::evaluateJavaScriptWithSourceMap(std::__1::shared_ptr<facebook::jsi::Buffer const> const&, std::__1::shared_ptr<facebook::jsi::Buffer const> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::evaluateJavaScript(std::__1::shared_ptr<facebook::jsi::Buffer const> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)
facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0::operator()(facebook::jsi::Runtime&) const
decltype(std::declval<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&>()(std::declval<facebook::jsi::Runtime&>())) std::__1::__invoke[abi:de200100]<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&>(facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&)
void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de200100]<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&>(facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&)
void std::__1::__invoke_r[abi:de200100]<void, facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&>(facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&)
std::__1::__function::__alloc_func<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0, std::__1::allocator<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0>, void (facebook::jsi::Runtime&)>::operator()[abi:de200100](facebook::jsi::Runtime&)
std::__1::__function::__func<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0, std::__1::allocator<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0>, void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&)
std::__1::__function::__value_func<void (facebook::jsi::Runtime&)>::operator()[abi:de200100](facebook::jsi::Runtime&) const
std::__1::function<void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&) const
facebook::react::Task::execute(facebook::jsi::Runtime&, bool)
facebook::react::RuntimeScheduler_Modern::executeTask(facebook::jsi::Runtime&, facebook::react::Task&, bool) const
facebook::react::RuntimeScheduler_Modern::runEventLoopTick(facebook::jsi::Runtime&, facebook::react::Task&)
facebook::react::RuntimeScheduler_Modern::runEventLoop(facebook::jsi::Runtime&)
facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0::operator()(facebook::jsi::Runtime&) const
decltype(std::declval<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&>()(std::declval<facebook::jsi::Runtime&>())) std::__1::__invoke[abi:de200100]<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&>(facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&)
void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de200100]<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&>(facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&)
void std::__1::__invoke_r[abi:de200100]<void, facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&>(facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&)
std::__1::__function::__alloc_func<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0, std::__1::allocator<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0>, void (facebook::jsi::Runtime&)>::operator()[abi:de200100](facebook::jsi::Runtime&)
std::__1::__function::__func<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0, std::__1::allocator<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0>, void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&)
std::__1::__function::__value_func<void (facebook::jsi::Runtime&)>::operator()[abi:de200100](facebook::jsi::Runtime&) const
std::__1::function<void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&) const
_ZZZN8facebook5react13ReactInstanceC1ENSt3__110unique_ptrINS0_9JSRuntimeENS2_14default_deleteIS4_EEEENS2_10shared_ptrINS0_18MessageQueueThreadEEENS8_INS0_12TimerManagerEEENS2_8functionIFvRNS_3jsi7RuntimeERKNS0_14JsErrorHandler14ProcessedErrorEEEEPNS0_18jsinspector_modern10HostTargetEENK3$_0clINSD_IFvSG_EEEEEDaT_ENKUlvE_clEv
_ZNSt3__18__invokeB8de200100IRZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS2_9JSRuntimeENS_14default_deleteIS5_EEEENS_10shared_ptrINS2_18MessageQueueThreadEEENS9_INS2_12TimerManagerEEENS_8functionIFvRNS1_3jsi7RuntimeERKNS2_14JsErrorHandler14ProcessedErrorEEEEPNS2_18jsinspector_modern10HostTargetEENK3$_0clINSE_IFvSH_EEEEEDaT_EUlvE_JEEEDTclclsr3stdE7declvalISW_EEspclsr3stdE7declvalIT0_EEEEOSW_DpOSZ_
_ZNSt3__128__invoke_void_return_wrapperIvLb1EE6__callB8de200100IJRZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS4_9JSRuntimeENS_14default_deleteIS7_EEEENS_10shared_ptrINS4_18MessageQueueThreadEEENSB_INS4_12TimerManagerEEENS_8functionIFvRNS3_3jsi7RuntimeERKNS4_14JsErrorHandler14ProcessedErrorEEEEPNS4_18jsinspector_modern10HostTargetEENK3$_0clINSG_IFvSJ_EEEEEDaT_EUlvE_EEEvDpOT_
_ZNSt3__110__invoke_rB8de200100IvJRZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS2_9JSRuntimeENS_14default_deleteIS5_EEEENS_10shared_ptrINS2_18MessageQueueThreadEEENS9_INS2_12TimerManagerEEENS_8functionIFvRNS1_3jsi7RuntimeERKNS2_14JsErrorHandler14ProcessedErrorEEEEPNS2_18jsinspector_modern10HostTargetEENK3$_0clINSE_IFvSH_EEEEEDaT_EUlvE_EEESW_DpOT0_
_ZNSt3__110__function12__alloc_funcIZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS3_9JSRuntimeENS_14default_deleteIS6_EEEENS_10shared_ptrINS3_18MessageQueueThreadEEENSA_INS3_12TimerManagerEEENS_8functionIFvRNS2_3jsi7RuntimeERKNS3_14JsErrorHandler14ProcessedErrorEEEEPNS3_18jsinspector_modern10HostTargetEENK3$_0clINSF_IFvSI_EEEEEDaT_EUlvE_NS_9allocatorISY_EEFvvEEclB8de200100Ev
_ZNSt3__110__function6__funcIZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS3_9JSRuntimeENS_14default_deleteIS6_EEEENS_10shared_ptrINS3_18MessageQueueThreadEEENSA_INS3_12TimerManagerEEENS_8functionIFvRNS2_3jsi7RuntimeERKNS3_14JsErrorHandler14ProcessedErrorEEEEPNS3_18jsinspector_modern10HostTargetEENK3$_0clINSF_IFvSI_EEEEEDaT_EUlvE_NS_9allocatorISY_EEFvvEEclEv
std::__1::__function::__value_func<void ()>::operator()[abi:de200100]() const
std::__1::function<void ()>::operator()() const
facebook::react::tryAndReturnError(std::__1::function<void ()> const&)
facebook::react::RCTMessageThread::tryFunc(std::__1::function<void ()> const&)
facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0::operator()() const
decltype(std::declval<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>()()) std::__1::__invoke[abi:de200100]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&)
void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de200100]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&)
void std::__1::__invoke_r[abi:de200100]<void, facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&)
std::__1::__function::__alloc_func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0>, void ()>::operator()[abi:de200100]()
std::__1::__function::__func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0>, void ()>::operator()()
std::__1::__function::__value_func<void ()>::operator()[abi:de200100]() const
std::__1::function<void ()>::operator()() const
invocation function for block in facebook::react::RCTMessageThread::runAsync(std::__1::function<void ()>)
973E47E5-88F0-3367-B9D4-46D5CB999B75
973E47E5-88F0-3367-B9D4-46D5CB999B75
973E47E5-88F0-3367-B9D4-46D5CB999B75
973E47E5-88F0-3367-B9D4-46D5CB999B75
+[RCTJSThreadManager runRunLoop]
457AF377-CACC-3719-993B-6187AE01BAEB
_pthread_start
thread_start
 

image

Stacktrace

These warnings pollute the console during development and indicate incorrect event registration.

RCTModuleConstantsForDestructuredComponent
    RCTUIManager.mm:107
facebook::react::(anonymous namespace)::getConstants(facebook::jsi::Runtime&)
...

Root Cause

React Native automatically converts event names from onLoadtopLoad, which follows the direct event naming convention (top* prefix).

However, all animation events in ios/DotlottieReactNativeViewManager.m are registered as RCTBubblingEventBlock:

RCT_EXPORT_VIEW_PROPERTY(onLoad, RCTBubblingEventBlock)  //
RCT_EXPORT_VIEW_PROPERTY(onComplete, RCTBubblingEventBlock)  //

This creates a mismatch between:

  • Event name: topLoad (suggests direct event)
  • Registration type: RCTBubblingEventBlock (bubbling event)

This issue appeared in v0.6.0 after the iOS implementation was migrated to SwiftUI. v0.5.0 didn't have this issue.

✅ Solution

Changed animation event handlers from RCTBubblingEventBlock to RCTDirectEventBlock in ios/DotlottieReactNativeViewManager.m:

RCT_EXPORT_VIEW_PROPERTY(onPlay, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPause, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onStop, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onLoop, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onFrame, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onRender, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onComplete, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onLoad, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onLoadError, RCTDirectEventBlock)

This aligns with React Native's event naming conventions and makes semantic sense - animation lifecycle events don't need to bubble up to parent components.

🧪 Testing

  • Tested on iOS Simulator (iOS 15.4+)
  • No "re-registered" warnings in console after the fix
  • All animation events (onLoad, onComplete, onPlay, etc.) fire correctly
  • Hot reload works without issues
  • Existing functionality remains unchanged

Fixes event re-registration warnings in iOS when using SwiftUI implementation.
Changes RCTBubblingEventBlock to RCTDirectEventBlock for all animation events
to match React Native's event naming conventions (top* prefix).

Resolves LottieFiles#24
@changeset-bot
Copy link

changeset-bot bot commented Oct 21, 2025

⚠️ No Changeset found

Latest commit: 8d5cdce

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Member

@theashraf theashraf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @YOOGOMJA for your contribution 🚀 !!

@theashraf theashraf merged commit a17226e into LottieFiles:main Oct 21, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants