Ошибка навигации при первом запуске в приложении Xamarin.Forms Shell - PullRequest
0 голосов
/ 11 марта 2020

Главная страница моего приложения проверяет информацию о пользователе. В зависимости от условия всплывающее окно показывает, что происходит переход на страницу с веб-просмотром. Я перехожу к нему, используя стандартный подход:

await Shell.Current.Navigation.PushAsync(new BindCardPage(user.uid), false);

Но когда я запускаю приложение в первый раз, после попытки перейти на страницу веб-просмотра выдается NRE:

System.NullReferenceException: Object reference not set to an instance of an object.
 at Xamarin.Forms.ShellSection.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00013] in D:\a\1\s\Xamarin.Forms.Core\Shell\ShellSection.cs:514 
 at Xamarin.Forms.ShellSection+NavigationImpl.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Shell\ShellSection.cs:714 
 at Xamarin.Forms.Internals.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in D:\a\1\s\Xamarin.Forms.Core\NavigationProxy.cs:117 
 at Xamarin.Forms.Shell+NavigationImpl.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Shell\Shell.cs:1161 
 at Xamarin.Forms.Internals.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in D:\a\1\s\Xamarin.Forms.Core\NavigationProxy.cs:117 

Но когда я снова запускаю приложение (условие не изменилось), то же самое всплывающее окно переходит на страницу без проблем. Я попытался добавить пустой конструктор и установить значение по умолчанию, но это не помогло. Посмотрел точки останова - все мои данные, которые я передаю, не равны нулю, компонент WebView также не равен нулю. Это странная ошибка, и я не знаю, что с ней делать

Моя версия Xamarin.Forms: 4.4.0.991537

1 Ответ

0 голосов
/ 11 марта 2020

Был похожий cra sh, теперь проблема в том, что оболочка проталкивает пустую страницу в NavStack в версии 4.2.xxx и выше, что очень раздражает, но это так и есть. Я смог решить эту проблему, написав следующий код в OnBackButtonPressed моего класса Apps Shell.

    protected override bool OnBackButtonPressed()
    {
        if (Application.Current.MainPage.GetType() == typeof(AppShell) && Shell.Current.Navigation.NavigationStack.Where(x => x != null).Any())
        {
            return base.OnBackButtonPressed();
        }
        else
        {
            System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
            return true;
        }
    } 

Где AppShell - мой пользовательский класс Shell.

Goodluck, не стесняйтесь ответьте, если у вас есть какие-либо вопросы

...