Как условно сделать PopAsyn c в зависимости от того, какая страница в данный момент отображается пользователю - PullRequest
0 голосов
/ 17 июня 2020

На одной странице моего приложения пользователь может отправить два запроса через веб-сокеты. Затем я получаю два ответа через веб-сокет. В каждом из этих ответов я выталкиваю страницу из стека навигации. Это на странице своего профиля, где они могут редактировать некоторую базовую c информацию или изменять свой пароль. Надеюсь, они обычно делают только один, но если они делают и то, и другое и нажимают «Сохранить», страница появляется дважды.

Я пытался проверить текущую страницу, и если они все еще находятся на странице профиля, перейти на go вперед и открыть ее, но если их нет, то пропустите всплывающее окно.

Похоже, что popasyn c на самом деле не удаляет страницу из стека, потому что я потом вызову стек навигации в список для проверки, и он все еще там. Я попытался проверить, были ли какие-либо страницы в стеке страницами профиля, чтобы затем открыть его. Это все еще может быть небрежным, если в стеке было несколько экземпляров этого, но это, по крайней мере, приведет меня в правильном направлении.

Я также пытался использовать MessagingCenter, чтобы вернуть его в исходный код, но этого не произошло сделать трюк тоже.

Основная проблема здесь в том, что я хочу открыть страницу только в том случае, если это та страница, которую пользователь просматривает в данный момент.

Если бы кто-нибудь мог указать мне в правильном направлении, я был бы очень признателен.

else if (root.payload?.data?.updateUserFields != null)
                {
                    DabGraphQlUpdateUserFields fields = root.payload.data.updateUserFields;

                    dbSettings.StoreSetting("Email", fields.email);
                    dbSettings.StoreSetting("FirstName", fields.firstName);
                    dbSettings.StoreSetting("LastName", fields.lastName);

                    GlobalResources.WaitStop();
                    var UserName = GlobalResources.GetUserName().Split(' ');
                    GuestStatus.Current.UserName = GlobalResources.GetUserName();
                    Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.DisplayAlert("Success", "User profile information has been updated", "OK"); ; });
                    DabProfileManagementPage profilePage = new DabProfileManagementPage();
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        if (Application.Current.MainPage.Navigation.NavigationStack.Any(p => p is DabProfileManagementPage))
                        {
                            var existingPagess = Application.Current.MainPage.Navigation.NavigationStack.ToList();
                            Application.Current.MainPage.Navigation.PopAsync();
                            var _lastPage = Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault();
                            Application.Current.MainPage.Navigation.RemovePage(_lastPage);
                            var existingPages = Application.Current.MainPage.Navigation.NavigationStack.ToList();
                        }
                    });

                    //Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.Navigation.PopAsync(); });
                }
                else if (root.payload?.data?.updatePassword != null)
                {
                    GlobalResources.WaitStop();
                    if (root.payload.data.updatePassword == true)
                    {
                        Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.DisplayAlert("Success", "Your password has been updated", "OK"); ; });
                        Device.BeginInvokeOnMainThread(() =>
                        {
                            if (Application.Current.MainPage.Navigation.NavigationStack.Any(p => p is DabProfileManagementPage))
                            {
                                var existingPagess = Application.Current.MainPage.Navigation.NavigationStack.ToList();
                                Application.Current.MainPage.Navigation.PopAsync();
                                var _lastPage = Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault();
                                Application.Current.MainPage.Navigation.RemovePage(_lastPage);
                                var existingPages = Application.Current.MainPage.Navigation.NavigationStack.ToList();
                            }
                        });

                        //Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.Navigation.PopAsync(); });
                    }
                }

1 Ответ

0 голосов
/ 17 июня 2020

Как указал Джейсон, я просто добавил переменную типа int и увеличил ее после того, как произошел всплеск, и сбросил ее после попытки go за 2. Я также сбрасываю ее на 0, когда пользователь щелкает, чтобы снова открыть страницу. Единственная проблема, которая не должна происходить часто, - это если пользователь пытается go и изменить информацию в третий раз, не покидая страницы. Никакой попсы не будет. Я думал о добавлении таймера, но раньше у меня были приложения, которые запутались с таймерами, поэтому я решил оставить его как есть. Надеюсь, я найду способ запускать один раз каждый раз, независимо от того, сколько раз пользователь решает использовать эту функцию.

                else if (root.payload?.data?.updateUserFields != null)
                {
                    DabGraphQlUpdateUserFields fields = root.payload.data.updateUserFields;

                    dbSettings.StoreSetting("Email", fields.email);
                    dbSettings.StoreSetting("FirstName", fields.firstName);
                    dbSettings.StoreSetting("LastName", fields.lastName);

                    GlobalResources.WaitStop();
                    var UserName = GlobalResources.GetUserName().Split(' ');
                    GuestStatus.Current.UserName = GlobalResources.GetUserName();
                    Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.DisplayAlert("Success", "User profile information has been updated", "OK"); ; });
                    if (popRequests < 1)
                    {
                        popRequests = popRequests + 1;
                        Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.Navigation.PopAsync(); });
                    }
                    else
                        popRequests = 0;
                }
                else if (root.payload?.data?.updatePassword != null)
                {
                    GlobalResources.WaitStop();
                    if (root.payload.data.updatePassword == true)
                    {
                        Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.DisplayAlert("Success", "Your password has been updated", "OK"); ; });
                        if (popRequests < 2)
                        {
                            popRequests = popRequests + 1;
                            Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage.Navigation.PopAsync(); });
                        }
                        else
                            popRequests = 1;
                    }
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...