in libraries/rib-base/src/main/kotlin/com/uber/rib/core/Router.kt [155:186]
public open fun detachChild(childRouter: Router<*>) {
val isChildRemoved = children.remove(childRouter)
val interactor = childRouter.interactor
ribRefWatcher.watchDeletedObject(interactor)
ribRefWatcher.logBreadcrumb(
"DETACHED",
childRouter.javaClass.simpleName,
this.javaClass.simpleName,
)
if (savedInstanceState != null) {
val childrenBundles = savedInstanceState?.getBundleExtra(KEY_CHILD_ROUTERS)
val childRouterTag = childRouter.tag
if (childRouterTag != null) {
childrenBundles?.putBundleExtra(childRouterTag, null)
} else {
Rib.getConfiguration()
.handleNonFatalWarning("A RIB tried to detach a child that was never attached", null)
}
}
triggerRibActionAndEmitEvents(
childRouter,
RibActionEmitterType.ROUTER,
RibEventType.DETACHED,
) {
childRouter.dispatchDetach()
}
if (isChildRemoved) {
RibEvents.emitRouterEvent(RibEventType.DETACHED, childRouter, this)
}
}