Как обрабатывать аутентификацию при отображении экрана загрузки? - PullRequest
0 голосов
/ 18 сентября 2018

Как показать экран загрузки и обрабатывать авторизацию одновременно?

Могу ли я переключиться на LoadingView и вернуться к AuthView в AuthController или мне нужно переместить логику аутентификации на LoadingController?

class AuthController : Controller() {
    val authView : AuthView by inject()
    val loadingView : LoadingView by inject()

    fun tryAuth(login: String, password: String) {
        runAsync {
            login == "admin" && password == "admin"
        } ui { successful ->
            authView.replaceWith(loadingView, ViewTransition.Fade(0.5.seconds))

            if (successful) {
                // doesn't work
                loadingView.replaceWith(MainView::class, ViewTransition.Metro(0.5.seconds))
            } else {
                // doesn't work
                loadingView.replaceWith(AuthView::class, ViewTransition.Fade(0.5.seconds))
            }
        }
    }
}

1 Ответ

0 голосов
/ 19 сентября 2018

Вы заменяете AuthView на LoadingView, а затем LoadingView на MainView в том же импульсе, так что это не даст вам того, что вы хотите.Обычно вы хотите изменить значение на LoadingView в потоке пользовательского интерфейса, прежде чем оценивать информацию об аутентификации.Используя этот подход, ваш код работает, но он может быть не тем, что вы хотите.

class AuthController : Controller() {
    val authView : AuthView by inject()
    val loadingView : LoadingView by inject()

    fun tryAuth(login: String, password: String) {
        authView.replaceWith(loadingView, ViewTransition.Fade(0.5.seconds))

        runAsync {
            // Simulate db access or http call
            Thread.sleep(2000)
            login == "admin" && password == "admin"
        } ui { successful ->

            if (successful) {
                // doesn't work
                loadingView.replaceWith(MainView::class, ViewTransition.Metro(0.5.seconds))
            } else {
                // doesn't work
                loadingView.replaceWith(AuthView::class, ViewTransition.Fade(0.5.seconds))
            }

        }
    }
}

class AuthView : View("Auth") {
    val authController: AuthController by inject()

    override val root = stackpane {
        button(title).action {
            authController.tryAuth("admin", "admin")
        }
    }
}

class LoadingView : View("Loading...") {
    override val root = stackpane {
        label(title)
    }
}

class MainView : View("Main View") {
    override val root = stackpane {
        label(title)
    }
}

Вы должны иметь в виду, что замена вида не изменит размер окна (хотя вы можете получить доступ к сцене и попросить изменить размер для текущего вида), поэтому вам лучше открыть каждый из них.вместо этого просмотрите в отдельном окне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...