XamarinForms Shell OnResume - показывается предыдущая страница - PullRequest
0 голосов
/ 04 мая 2020

Я хочу добиться механизма блокировки в приложении оболочки XF 4.5.0.

У меня есть таймер stati c, который подсчитывает, сколько секунд прошло, и на основе некоторых логических данных c представляет любой экран, отображающий этого пользователя. было до того, как положить приложение позади (пользователь пошел в Instagram, но приложение работает в фоновом режиме)

Итак, мой метод OnResume() выглядит следующим образом:

private bool IsUserExists()
        {
            if (!string.IsNullOrWhiteSpace(GlobalAppSettings.Email) && !string.IsNullOrWhiteSpace(GlobalAppSettings.Password) && !string.IsNullOrWhiteSpace(GlobalAppSettings.Pin))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        protected override void OnResume()
        {
            if ((!OnSleepOrPauseTime.HasValue || OnSleepOrPauseTime.Value.AddSeconds(5) <= DateTime.Now)
                &&(IsUserExists()))
            {
                Xamarin.Forms.Device.BeginInvokeOnMainThread(async () =>
                {
                    await Shell.Current.GoToAsync(Routes.LoginPinPage, false);
                });
            }
        }

Проблема : пользователь примерно на полсекунды видит экран, на котором он был раньше, а затем перенаправляет его на LoginPinPage.

Счастливый путь : Должно быть, этот пользователь не видит, что Мерцающая страница, которая была до выхода из приложения, сразу же блокирует экран.

Возможное решение: Что пришло мне в голову, прежде чем покинуть приложение, чтобы как-то перенаправить в фоновом приложении на экран входа в систему?

1 Ответ

0 голосов
/ 04 мая 2020

PushAsyn c имеет 2 перегрузки - документы

По умолчанию метод PushAsync выдвигает новую страницу с анимацией . Я думаю, что это так называемое «мерцание», о котором вы говорите. Вы можете попытаться использовать вторую перегрузку и передать false для свойства animated и посмотреть, имеет ли это какое-либо значение.

PushAsync(new LoginPinPage(), false);

Если вы хотите перенаправить пользователя в отпуске приложения - вы можете использовать другой метод жизненного цикла Application - OnSleep и вызывать вашу навигацию там. Но я советую сначала попробовать без анимации.

Имейте в виду, что, если вы решите использовать метод OnSleep, вам также придется просмотреть sh страницу без анимации. Я только что протестировал пуш с анимацией, и я действительно вижу мерцание, о котором вы упоминаете. Установка флага animated на false , устранение любых мерцаний для меня.

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