InsertKoinIO / koin

Koin - a pragmatic lightweight dependency injection framework for Kotlin & Kotlin Multiplatform
https://insert-koin.io
Apache License 2.0
8.98k stars 712 forks source link

ClosedScopeException caused by Fragment nested in Fragment being destroyed in ViewPager2 #1543

Open ZuiRenA opened 1 year ago

ZuiRenA commented 1 year ago

Describe the bug Used Fragment nested in Fragment Within ViewPager2,Scope is closed after switching multiple times。

Expected behavior Scope's Rebuildable

Koin project used and used version (please complete the following information): koin-core version 3.3.2

Code Example

/** BaseViewBindingFragment extends ScopeFragment */
abstract class BaseMvpFragment <V : ViewBinding, P : IMVPContract.IBasePresenter> : BaseViewBindingFragment<V>(), IMVPContract.IBaseView<P> {

    protected var presenter: P? = null
        private set
    protected val requiredPresenter: P get() = requireNotNull(presenter)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        initPresenter()
        requiredPresenter.onPresenterOnPrepared()
        super.onViewCreated(view, savedInstanceState)
        lifecycle.addObserver(requiredPresenter)
    }

    override fun onDestroyView() {
        super.onDestroyView()
        presenter = null
    }

    @Suppress("UNCHECKED_CAST")
    override fun initPresenter() {
        if (presenter == null) {
            presenter = scope.get(presenterType()) { parametersOf(this as IMVPContract.IBaseView<Any?>) }
        }
    }

    abstract fun presenterType(): KClass<P>
}
arnaudgiuliani commented 1 year ago

can you provide a sample project to help test it? 🤔