Anton Afanasev
01/05/2022, 8:03 PM// Shared:
interface EventListener {
fun onEvent(event: Event)
}
internal expect class EventDispatcher {
fun dispatch(event: Event)
}
// iOS:
internal actual class EventDispatcher(listener: EventListener) {
private val listenerWeakRef = WeakReference(listener)
actual fun dispatch(event: Event) {
listenerWeakRef.value?.onEvent(event)
}
}
// Android
internal actual class EventDispatcher(private val listener: EventListener) {
actual fun dispatch(event: Event) {
listener.onEvent(event)
}
}
and when user subscribe to events I wrap EventListener he/she provides with EventDispatcher (platform specific implementation)
//Shared code
fun subscribe(listener: EventListener) {
someInternalClass.subscribe(EventDispatcher(listener)) // From here on I am dispatching using wrapper.
}
Does that makes sense to you?