navigation xamarin xamarin.android xamarin.forms

navigation - PushAsync no es compatible a nivel mundial en Android, utilice una página de navegación-Xamarin.Forms



xamarin.android (4)

Tengo el siguiente método en un Xamarin.Forms.ContentPage conectado a un evento de clic de botón

public class LoginPage : ContentPage { private Button _loginButton = null; private Entry _PasswordInput = null; private Entry _UsernameInput = null; public LoginPage() { _UsernameInput = new Entry { Placeholder = "Username" }; _PasswordInput = new Entry { Placeholder = "Password", IsPassword = true }; _loginButton = new Button { Text = "Login", BorderRadius = 5 } _loginButton.Clicked += LogIn; Content = new StackLayout { VerticalOptions = LayoutOptions.Center, Children = { _UsernameInput, _PasswordInput, _loginButton, }, Spacing = 15 }; } public async void LogIn(object sender, EventArgs eventsArgs) { //do authenticate stuff here SSO.MyAuthentication client = new SSO.MyAuthentication(); bool isAuthenticated = client.Authenticate(_UsernameInput.Text, _PasswordInput.Text); if(isAuthenticated) { //Push home page to top of navigation stack Navigation.PushAsync(new HomePage()); } } }

En la siguiente línea de código Navigation.PushAsync(new HomePage()); , Estoy obteniendo la siguiente excepción durante la depuración:

PushAsync no es compatible a nivel mundial en Android, utilice una página de navegación

¿Cómo Xamarin.Forms.NavigationPage este problema usando un objeto Xamarin.Forms.NavigationPage ?


Debe incluir su página de inicio de sesión en una página de navegación. Esto solucionará su error, pero lo dejará con la página de inicio de sesión contenida en su pila de navegación.

Un enfoque alternativo sería hacer que su página de inicio sea la raíz de la aplicación, y luego mostrar la página de inicio de sesión modalmente encima de ella. Solo cuando el usuario inicia sesión correctamente, usted descarta el modo LoginPage para que pueda ver la HomePage.


En el archivo app.xaml.cs,

Reemplazar

MainPage = new <namespace>.MainPage();

Con

MainPage = new NavigationPage(new <namespace>.MainPage());

Entonces use

await Navigation.PushAsync(new NavigationPage(new MainPage2()));


Solo cambio pushAsync con pushModalAsync :)

public async void LogIn(object sender, EventArgs eventsArgs) { //do authenticate stuff here SSO.MyAuthentication client = new SSO.MyAuthentication(); bool isAuthenticated = client.Authenticate(_UsernameInput.Text, _PasswordInput.Text); if(isAuthenticated) { //Push home page to top of navigation stack //Navigation.PushAsync(new HomePage()); Navigation.PushModalAsync(new HomePage()); } }


Usted está llamando "PushAsync" :

public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void btnCourseList_Clicked(object sender, EventArgs e) { Navigation.PushAsync(new PageB()); } }

pero no inició NavigationPage, que normalmente se realiza en la clase App.cs, o al menos debería iniciarse antes de cualquier llamada a "PushAsync" :

MainPage = new NavigationPage(new PageA());