Workaround the NavigationController not releasing popped screens and clean up the roomScreen + timelineController + timelineProvider + roomProxy on stop()

This commit is contained in:
Stefan Ceriu
2022-11-28 17:32:25 +02:00
committed by Stefan Ceriu
parent 8c86bf9acb
commit 623eecec77
3 changed files with 20 additions and 8 deletions
@@ -25,10 +25,16 @@ struct RoomScreenCoordinatorParameters {
}
final class RoomScreenCoordinator: CoordinatorProtocol {
private let parameters: RoomScreenCoordinatorParameters
private var parameters: RoomScreenCoordinatorParameters?
private var viewModel: RoomScreenViewModelProtocol
private var navigationController: NavigationController { parameters.navigationController }
private var viewModel: RoomScreenViewModelProtocol?
private var navigationController: NavigationController {
guard let parameters else {
fatalError()
}
return parameters.navigationController
}
init(parameters: RoomScreenCoordinatorParameters) {
self.parameters = parameters
@@ -43,7 +49,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
// MARK: - Public
func start() {
viewModel.callback = { [weak self] result in
viewModel?.callback = { [weak self] result in
guard let self else { return }
MXLog.debug("RoomScreenViewModel did complete with result: \(result).")
switch result {
@@ -56,11 +62,17 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
}
func stop() {
viewModel.stop()
viewModel?.stop()
viewModel = nil
parameters = nil
}
func toPresentable() -> AnyView {
AnyView(RoomScreen(context: viewModel.context))
guard let context = viewModel?.context else {
fatalError()
}
return AnyView(RoomScreen(context: context))
}
// MARK: - Private