На одной странице моего приложения пользователь может отправить два запроса через веб-сокеты. Затем я получаю два ответа через веб-сокет. В каждом из этих ответов я выталкиваю страницу из стека навигации. Это на странице своего профиля, где они могут редактировать некоторую базовую 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(); });
}
}